2014-07-18 87 views
1

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

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

我必须把版本号,但那么现在我有两个相同的模块B瓶:ModuleB.jar(在名称中没有版本)和ModuleB-1.0.jar在沿有ModuleA.jar目标目录。

我更喜欢从罐子的最后名称保持版本号了,因为我们还有其他遗留应用程序依赖于这些罐子

反正有添加模块B作为没有版本号的模块A的POM的依赖?任何干净的解决方案,或者我只是让自己生活困难?

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

谢谢!

复制的依赖执行(我可以带出副本中的版本,但我会失去对第三方jar文件的版本,如春瓶= /):

<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

作为一个起点,如果它是一个多模块项目,所有模块都使用相同的版本构建,那么您应该能够指定$ {project.version},而不必一直更新。我不认为这会解决你的实际问题。这两个moduleB jar是否相同(如同样的校验和所有内容)只是名称不同? –

+0

@GerardRyan是的ModuleB罐子是完全相同的只是不同的名称。看看我编辑的编辑,它会解释发生了什么 –

+0

你可以包括你用来复制依赖关系的父pom xml吗?我认为解决方案可能会从依赖副本中排除模块B. –

回答

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> 

的第一个插件是建立我的所有子模块,并将其jar'ing到指定的输出目录。第二个插件是复制我的所有模块的依赖项到第一个插件中的相同输出目录无内部模块使用<excludeGroupIds>

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