【问题标题】:maven multi module dependency versionmaven多模块依赖版本
【发布时间】: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。

标签: java maven jar maven-3


【解决方案1】:

所以问题是我复制了我的内部模块两次:一次是在运行 maven-jar-plugin(最终名称中没有版本)时,一次是在运行 maven-dependency-plugin 时,两个插件都输出到同一个目标目录给了我 ModuleB.jar 和 ModuleB-1.0.jar。

所以我在父 pom 中配置了插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <outputDirectory>${build.dir}/lib</outputDirectory>
    </configuration>
</plugin> 

和

<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>
                <excludeGroupIds>com.mycompany.app</excludeGroupIds> 
            </configuration>
        </execution>
    </executions>
</plugin>

第一个插件正在构建我所有的子模块并将它们打包到指定的输出目录。第二个插件将我的所有模块的依赖项复制到第一个插件中的同一输出目录中,使用&lt;excludeGroupIds&gt;

感谢您帮助我意识到有一个简单的解决方案!

【讨论】:

    猜你喜欢
    • 2016-01-10
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2019-08-21
    • 2014-11-18
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多