maven多模块依赖版本

时间:2014-07-18 16:21:23

标签: java maven jar maven-3

我有一个多模块maven项目:模块A依赖于模块B.当模块B构建时,它被命名为ModuleB.jar并被复制到目标目录。现在在模块A的pom我必须把

<dependency>
  <groupid>com.mycompany.app</groupid>
  <artificatId>ModuleB</artifactId>
  <version>1.0</version>
</dependency>

我必须输入版本号,但现在我有两个相同的模块B罐:ModuleB.jar(名称中没有版本)和ModuleB-1.0.jar以及目标目录中的ModuleA.jar。 / p>

我更喜欢将版本号保留在jar的最终名称中,因为我们有其他遗留应用程序,具体取决于这些jar

无论如何在没有版本号的情况下将模块B添加为模块A的pom中的依赖项?任何干净的解决方案,或者我只是让自己生活困难?

编辑: 为了澄清:这些模块是从父pom构建为jar,并与其依赖项一起复制到项目父目录之外的目标目录。因此,有两个ModuleB jar的原因:一个是模块B编译和打包时,最终名称设置为ModuleB.jar,另一个是模块A与其依赖项一起编译和打包时,其中包括模块B,但名称为ModuleB- 1.0.jar

谢谢!

复制依赖项执行(我可以在复制期间删除版本,但之后我会丢失第三方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>

1 个答案:

答案 0 :(得分:1)

所以问题是我复制了我的内部模块两次:一次运行maven-jar-plugin(没有finalname版本),一次运行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>

第一个插件是构建我所有的子模块并将它们运行到指定的输出目录。第二个插件是将我的所有模块的依赖项复制到第一个插件中的同一输出目录,而不是使用<excludeGroupIds>

内部模块

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