Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
maven组件溢出错误_Maven_Maven Assembly Plugin_Stack Overflow - Fatal编程技术网

maven组件溢出错误

maven组件溢出错误,maven,maven-assembly-plugin,stack-overflow,Maven,Maven Assembly Plugin,Stack Overflow,嗨,stackoverflow的居民们 我对maven有意见,特别是在组装阶段。我有一个大型的多模块遗留项目,不幸的是它的子模块中有一些循环引用。它已经被改造为使用maven构建,但是重构循环引用将花费太长时间 该项目通过运行mvn安装构建良好,甚至可以毫无问题地运行mvn包,但在运行mvn包assembly:assembly时失败。尝试使用assembly:single运行它会导致生成失败,原因是“创建程序集存档发行版时出错:您必须至少设置一个文件” 对于assembly:assembly,它

嗨,stackoverflow的居民们

我对maven有意见,特别是在组装阶段。我有一个大型的多模块遗留项目,不幸的是它的子模块中有一些循环引用。它已经被改造为使用maven构建,但是重构循环引用将花费太长时间

该项目通过运行mvn安装构建良好,甚至可以毫无问题地运行mvn包,但在运行mvn包assembly:assembly时失败。尝试使用assembly:single运行它会导致生成失败,原因是“创建程序集存档发行版时出错:您必须至少设置一个文件”

对于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>

org.apache.maven.plugins
maven汇编插件
2.2.1
src/main/assembly/assembly-dependencies.xml
孩子1
孩子2
地区项目
地区项目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>

org.apache.maven.plugins
maven汇编插件
2.2.1
地区项目
装配
单一的
src/main/assembly/assembly-dependencies.xml
和程序集文件:

<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>

真的
groupid:Child1
groupid:Child2
${project.build.finalName}
假的
编译
运行时
真的

非常感谢您的帮助。

要创建一个只包含所有依赖项的jar,只需使用


org.apache.maven.plugins
maven汇编插件
2.6
带有依赖项的jar

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

目前最简单的修复方法是通过MAVEN_选项增加堆栈空间,例如

export MAVEN_OPTS=-Xss2m

有关更多详细信息,请参见

我假设您的父pom在pluginManagement部分包含maven assembly插件的配置?或者在构建部分有吗?如果是,则将其移除。此外,我假设distprojecpom中绑定maven组装插件的阶段不是“组装”,因为这样的生命周期阶段不存在。例如,您可以将其绑定到“包”阶段。是的,它位于插件管理部分。另外,关于生命周期绑定,您是对的,它过去是绑定到包的,但我将其取出以便于调试。我原以为会有一个组装阶段,但一个不存在的阶段也可以。你认为项目pom有包装“pom”吗?是的。对不起,我本来会把整个pom都放上去的,但我一直在努力让问题简洁。为什么你要调用mvn包,而不是补充目标:组装:组装?为什么不简单的mvn包呢?如果您正确地配置了maven assembly插件,那么一切都应该正常工作……mvn clean package是否正常工作并生成正确的归档文件?这些都在您的程序集描述符中吗,它看起来不完整?是的,但我想做更多的事情,比如不解包依赖的JAR,以及对运行库进行传递筛选。如果您想更改默认行为,只需使用给定的描述符(从网站复制)并对其进行适当的更改。这实际上就是我所做的:)我使用了带有依赖项描述符的jar作为模板,并做了一些修改以实现我的目的。在将maven assembly插件升级到2.2.1版(而不是隐式插件)后,我不再出现stackoverflow错误。
export MAVEN_OPTS=-Xss2m