2016-09-01 40 views
0

我想将我的Java项目构建成两个不同的版本,每个版本都基于相同依赖项上的不同版本。具体来说,我的项目A需要依赖项B,它有两个不同的版本(例如v1和v2)。我打算用B的每个依赖版本构建项目A,并获取两个不同的jar文件:A-v1.jar和A-v2.jar。源代码是相同的,所以我不想将它复制到两个不同的Maven项目中,因为我期望在B版的新版本发布时进行扩展。从同一个源代码分支构建不同的项目版本

我到目前为止的尝试:我定义了两个构建配置文件v1和v2,其中我已经指定了依赖项B的版本。这可以正常工作,因为我可以构建两个配置文件,但问题是我不知道如何告诉Maven向构建工件添加版本号。它始终将项目A构建到A-1.0.jar中,其中1.0是pom中的项目A版本。

我调查的一个更新:我在父pom的构建部分中添加了一个finalName元素来覆盖默认工件命名。现在命名将如$ {artifactId} - $ {project.version.mycustomver},其中project.version.mycustomver属性在每个构建配置文件中定义。这似乎会生成jar的正确命名,但是maven-install-plugin正在将工件名称更改回$ {artifactId} - $ {version}。不知道为什么以及如何避免它。

我欣赏任何建议。谢谢, DanP

+0

您可以简单地将依赖关系定义为'提供的',您将只创建一个工件。你的lib的用户可以简单地通过添加适当的依赖版本来决定。不需要有你自己的神器的不同版本等。 – khmarbaise

回答

0

您可以使用classifier这是为某种原因。

但是,您应该也可以使用在配置文件中覆盖的属性来更改version

由于您需要两个不同的POM,每个项目的“版本”一个,实际上您需要两个项目。但是,您可以拥有一个正常版本A.另一个为空,但使用依赖关系管理来排除和替换从A-v1更改为A-v2的依赖关系。

+0

我会检查分类器。我已经使用了模块版本的属性。但是,虽然构建良好,但生成的pom文件(驻留在具有生成的工件的Nexus存储库中)将继承属性而不是其值。因此,当我将A-v1.jar用作另一个项目的依赖项时,构建将失败,因为它不会找到pom定义。 – DanP

+0

即使使用分类器,您也可以为两个项目使用单个POM。 – YMomb

+0

不知道我理解你对使用两个项目的第二个建议。我不需要在两个项目中复制源代码吗?我绝对想要避免这种情况。 – DanP

相关问题