maven assembly throw stackoverflowerror

Hwe*_*wee 10 stack-overflow maven maven-assembly-plugin

嗨,stackoverflow的居民,

我遇到了maven的问题,特别是在装配阶段.我有一个大型多模块遗留项目,遗憾的是在其子模块中有一些循环引用.它已被改装为使用maven构建,但重构循环引用将花费太长时间.

通过运行mvn install可以很好地构建项目,甚至可以毫无问题地运行mvn包,但是在运行mvn package assembly:assembly时会失败.尝试使用程序集运行它:单个给我一个构建失败,因为"创建程序集存档distrib时出错:你必须至少设置一个文件".

使用assembly:assembly,它似乎一遍又一遍地处理相同的库,最终抛出stackoverflower错误.我猜这意味着模块中的循环引用正在引起这种情况,尽管因为它没有任何问题,我希望它能够在组装过程中存活下来.

还有其他原因吗?

该项目的结构如下:

Parent
 |_ Child1
 |_ Child2
 |_ dist-proj
Run Code Online (Sandbox Code Playgroud)

父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>
Run Code Online (Sandbox Code Playgroud)

分歧:

<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>
Run Code Online (Sandbox Code Playgroud)

和汇编文件:

<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>
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感谢.

Mar*_*ler 15

我也遇到过这个错误.查看Plexus Archiver源代码,每次遇到它已经看到的类或工件时,AbstractArchiver中的getResources返回的hasNext方法都会调用自身.这导致它即使在中型项目上也会耗尽堆栈空间.

目前最简单的解决方法是通过MAVEN_OPTS增加堆栈空间,例如

export MAVEN_OPTS=-Xss2m
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参见http://jira.codehaus.org/browse/MASSEMBLY-549


khm*_*ise 1

要仅创建一个包含所有依赖项的 jar,您只需使用预定义的描述符即可。

<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>
Run Code Online (Sandbox Code Playgroud)