【发布时间】:2011-09-07 06:09:40
【问题描述】:
大家好,stackoverflow,
我在使用 maven 时遇到问题,特别是在组装阶段。我有一个大型的多模块遗留项目,不幸的是它的子模块中有一些循环引用。它已被改造为使用 maven 构建,但重构循环引用将花费太长时间。
该项目通过运行 mvn install 构建良好,甚至运行 mvn package 没有问题,但在运行 mvn package assembly:assembly 时失败。由于“创建程序集存档分发时出错:您必须设置至少一个文件”,尝试使用 assembly:single 运行它会导致构建失败。
使用 assembly:assembly,它似乎一遍又一遍地处理相同的库,最终抛出 stackoverflowerror。我猜这意味着模块中的循环引用导致了这种情况,尽管因为它编译没有问题,我希望它也能在汇编中幸存下来。
还有其他原因吗?
项目结构如下:
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>
非常感谢任何帮助。
【问题讨论】:
-
我假设你的父 pom 在 pluginManagement 部分包含 maven-assembly-plugin 的配置?或者你有它在构建部分?如果是,则将其删除。此外,我假设您将 maven-assembly-plugin 绑定到的 dist-projec pom 中的阶段不是“组装”,导致这样的生命周期阶段不存在。例如,您可以将其绑定到“打包”阶段。
-
是的,它在 pluginManagement 部分。另外,生命周期绑定是对的,它曾经绑定到包,但我把它拿出来方便调试。我以为会有一个组装阶段,但一个不存在的也可以。
-
你 dist-project pom 有包装“pom”吗?
-
是的。抱歉,我会把整个 pom 都放上来,但我试图让问题保持简洁。
-
你为什么调用 mvn package 而不是补充目标:assembly:assembly?为什么不简单的 mvn 包?如果您正确配置了 maven-assembly-plugin,那么一切都应该运行良好...... mvn clean package 是否工作正常并生成正确的存档?这一切都在您的程序集描述符中吗,看起来不完整?
标签: maven maven-assembly-plugin stack-overflow