【发布时间】:2014-09-09 20:51:48
【问题描述】:
我有一个多模块 maven 项目:模块 A 依赖于模块 B。构建模块 B 时,它被命名为 ModuleB.jar 并复制到目标目录。现在在模块 A 的 pom 中我必须放
<dependency>
<groupid>com.mycompany.app</groupid>
<artificatId>ModuleB</artifactId>
<version>1.0</version>
</dependency>
我必须输入版本号,但现在我有两个相同的模块 B jar:ModuleB.jar(名称中没有版本)和ModuleB-1.0.jar 以及目标目录中的 ModuleA.jar。
我更喜欢在 jar 的最终名称中保留版本号,因为我们还有其他依赖于这些 jar 的遗留应用程序
有没有在没有版本号的情况下将模块 B 添加为模块 A 的 pom 中的依赖项?是否有任何干净的解决方案,或者我只是让自己的生活变得困难?
编辑: 澄清一下:这些模块是从父 pom 作为 jar 构建的,并与它们的依赖项一起复制到项目父目录之外的目标目录。因此有两个 ModuleB jar 的原因:一个是模块 B 被编译和打包,最终名称设置为 ModuleB.jar,另一个是模块 A 与其依赖项一起编译和打包,其中包括模块 B,但名称为 ModuleB- 1.0.jar
谢谢!
复制依赖执行(我可以在复制过程中删除版本,但随后我会丢失 3rd 方 jar 上的版本,例如 Spring jars =/):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${build.dir}/lib</outputDirectory>
<overWriteIfNewer>true</overWriteIfNewer>
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
【问题讨论】:
-
至少作为一个开始,如果它是一个多模块项目,其中所有模块都使用相同的版本构建,那么您应该能够指定 ${project.version} 而不必更新它每时每刻。我认为这不会解决您的实际问题。两个 moduleB jar 是否相同(如相同的校验和和所有内容)只是名称不同?
-
@GerardRyan 是的,ModuleB jar 完全相同,只是名称不同。看看我所做的编辑,它会解释发生了什么
-
能否包含用于复制依赖项的父 pom xml?我认为解决方案可能是从依赖副本中排除模块 B。
-
@BobPaulin 添加了复制依赖目标
-
使用 excludeArtifactIds 属性怎么样?您可以排除 ModuleA。