You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Mickael Istria (JIRA)" <ji...@apache.org> on 2019/01/14 09:38:00 UTC
[jira] [Commented] (MNG-6563) StackOverflowError when reading deep
(1000) project hierarchy
[ https://issues.apache.org/jira/browse/MNG-6563?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16741886#comment-16741886 ]
Mickael Istria commented on MNG-6563:
-------------------------------------
Here is the code I use to generate the project
{code:java}
private Set<File> buildLinearHierarchy(int depth, File tempDirectory) throws FileNotFoundException {
Set<File> poms = new HashSet<>(depth, 1.f);
for(int i = 0; i < depth; i++ ) {
File projectDir = new File(tempDirectory, "p" + i);
projectDir.mkdirs();
File pom = new File(projectDir, "pom.xml");
poms.add(pom);
try (PrintStream content = new PrintStream(pom);) {
content.println("<project>");
content.println(" <modelVersion>4.0.0</modelVersion>");
content.println(" <groupId>org.eclipse.m2e.core.tests.hierarchy</groupId>");
content.println(" <artifactId>pNUMBER</artifactId>".replace("NUMBER", Integer.toString(i)));
content.println(" <version>1</version>");
content.println(" <packaging>pom</packaging>");
if(i > 1) {
content.println(" <parent>");
content.println(" <groupId>org.eclipse.m2e.core.tests.hierarchy</groupId>");
content.println(" <artifactId>pNUMBER</artifactId>".replace("NUMBER", Integer.toString(i - 1)));
content.println(" <version>1</version>");
content.println(" <relativePath>../pNUMBER</relativePath>".replace("NUMBER", Integer.toString(i - 1)));
content.println(" </parent>");
}
content.println("</project>");
}
}
return poms;
}
{code}
then, invoking "DefaultProjectBuilder.build(new File("p999"))" should crash with a StackOverflowError.
I don't have the opportunity to automate such test right now.
One approach could be to reorganize the builder to first resolve the dependency chain as a Queue of Files and then build them from parents to leaves, caching each result in the meantime so it's processed only once.
> StackOverflowError when reading deep (1000) project hierarchy
> -------------------------------------------------------------
>
> Key: MNG-6563
> URL: https://issues.apache.org/jira/browse/MNG-6563
> Project: Maven
> Issue Type: Bug
> Components: core
> Reporter: Mickael Istria
> Priority: Major
>
> I'm trying to write tests loading huge extreme Maven projects in m2e to check how it likes it or not and how to improve it.
> One of the tests creates 1000 projects, each one being a parent of the other. When trying to read it, Maven (and thus m2e) crashes with a StackOverflowError because it deeply recurses on build/initParent methods.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)