高级堆栈溢出,
我遇到了maven的问题,特别是在装配阶段。我有一个大型多模块遗留项目,遗憾的是在其子模块中有一些循环引用。它已被改装为使用maven构建,但重构循环引用将花费太长时间。
通过运行mvn install可以很好地构建项目,甚至可以毫无问题地运行mvn包,但是在运行mvn package assembly:assembly时会失败。尝试使用程序集运行它:单个给我一个构建失败,因为“创建程序集存档发行版时出错:你必须至少设置一个文件”。
使用assembly:assembly,它似乎一遍又一遍地处理相同的库,最终抛出stackoverflower错误。我猜这意味着模块中的循环引用正在引起这种情况,尽管因为它没有任何问题,我希望它能够在组装过程中存活下来。
还有其他原因吗?
项目结构如下:
Parent
|_ Child1
|_ Child2
|_ dist-proj
父pom包含以下部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly-dependencies.xml</descriptor>
</descriptors>
</configuration>
</plugin>
<modules>
<module>Child1</module>
<module>Child2</module>
<module>dist-proj</module>
</modules>
dist-proj pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>dist-proj</id>
<phase>assembly</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly-dependencies.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
汇编文件:
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>groupid:Child1</include>
<include>groupid:Child2</include>
</includes>
<binaries>
<outputDirectory>${project.build.finalName}</outputDirectory>
<unpack>false</unpack>
<dependencySets>
<dependencySet>
<includes/>
<scope>compile</scope>
</dependencySet>
<dependencySet>
<includes/>
<scope>runtime</scope>
<useTransitiveFiltering>true</useTransitiveFiltering>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
非常感谢任何帮助。
答案 0 :(得分:15)
我也遇到过这个错误。查看Plexus Archiver源代码,每次遇到它已经看到的类或工件时,AbstractArchiver中的getResources返回的hasNext方法都会调用自身。这导致它即使在中型项目上也会耗尽堆栈空间。
目前最简单的解决方法是通过MAVEN_OPTS增加堆栈空间,例如
export MAVEN_OPTS=-Xss2m
答案 1 :(得分:1)
要仅创建包含所有依赖项的jar,您只需使用predefined descriptor。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>