根据maven中的组ID从依赖关系中删除版本号

时间:2013-09-11 21:06:29

标签: java maven

我有一个项目,它具有第三方依赖关系,以及对内部项目的依赖关系。我需要从内部开发的依赖工件中删除版本号。

例如:spring-2.5.6.jar应该在spring-2.5.6.jar的最终输出中,但MyInternalProject-1.0.17.jar需要更改为MyInternalProject.jar

我可以通过他们的组ID轻松识别内部依赖关系(它们都像com.mycompany.*)。 maven-dependency-plugin有一个stripVersion选项,但它似乎没有足够的选择性。有没有办法做到这一点,没有明确命名每个依赖项以及它们的最终名称应该是什么?


另一种说法:

我希望基于组ID为maves-assembly-plugin提供不同的outputFileNameMapping s。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:6)

我认为您可以使用以下食谱:

首先,在您的聚合器pom中使用dependency:copy-dependencies目标将您的jar复制到某个中间位置。您将需要两次执行,一次使用<stripVersion>true</stripVersion>执行内部依赖项;和第三方库<stripVersion>false</stripVersion>一个。您可以根据GroupId包含/排除工件,有关详细信息,请参阅http://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html

然后使用maven-assembly-plugin构建.zip应该是一个简单的任务!

答案 1 :(得分:0)

根据评论,我会在这里重新评估您的方法。通常将罐子检查到源代码控制中并不是一个好主意,尤其是无版本的罐子。想象一下,如果我只有一个引用 someArtifact.jar 的项目并且我试图调试它 - 我怎么知道它使用的是哪个版本?

像artifactory和nexus这样的工具是为了存储你的jar版本而构建的,包括内部和第三方(它们也可以代理公共存储库,如maven central)。为了保持构建的可重现性,我会将您的二进制文件检查为专为此设计的工具,然后您可以按版本引用它们。在开发过程中,您可以参考罐子的SNAPSHOT版本以获取最新版本,然后在您发布版本时,您可以参考二进制文件的稳定版本。

源控制系统用于存储源,而不是二进制文件。