我有一个具有依赖关系的项目。这个依赖项有不同的版本,我想用不同版本的这个依赖项作为整个tar吧发布我的项目。我是否需要单独执行不同的版本发布(目前我在一个版本中使用maven-assembly-plugin)。或者我可以使用任何maven插件?
答案 0 :(得分:0)
在我看来,有几种解决方案是可能的,如下所述(最后一条建议):
您可以使用属性作为依赖项版本的占位符,并通过命令行作为构建的一部分进行dinamically更改,因此每次将版本应用于新工件时都会更改。 因此,在您的pom中,您可以将属性定义如下:
<properties>
...
<dependencyname.version>1.2</dependencyname.version>
</properties>
其中dependencyname
是相关依赖关系的名称
然后,在依赖项部分中,您可以应用占位符,如下所示:
<dependencies>
...
<dependency>
<groupId>the-group-id</groupId>
<artifactId>the-artifact-id</artifactId>
<version>${dependencyname.version}</version>
</dependency>
</dependencies>
然后,从命令行可以随时通过artifactId -D
选项(name = value)传递它来覆盖此值
即。 mvn clean install -Ddependencyname.version=1.2
优势:您有一个集中点可以在运行时更改版本,或者作为构建的一部分进行硬编码。
Disavantage :您需要为每个版本构建一个版本,每次都需要手动更改版本。
您可以使用配置文件,每个依赖项版本的配置文件。然后在运行时激活配置文件(使用您当前使用或您喜欢的版本的默认配置文件)并使用关联的版本生成相关工件。
因此,在您的代码中,您可以将配置文件定义如下:
<profiles>
...
<profile>
<id>dependency-name-v1.2</id>
<dependencies>
...
<dependency>
<groupId>the-group-id</groupId>
<artifactId>the-artifact-id</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</profile>
<profile>
<id>dependency-name-v1.3</id>
<dependencies>
...
<dependency>
<groupId>the-group-id</groupId>
<artifactId>the-artifact-id</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
</profile>
</profiles>
激活配置文件后,它将在运行时覆盖相关依赖项的版本。任何时候您都可以通过命令行打开/关闭它,如下所示:
即。 mvn clean install -Pdependency-name-v1.2
优势:在个人资料中明确定义了所需的版本 Disavantage :您需要为每个版本构建一个版本,您需要在运行时根据要使用的版本手动更改配置文件名称。
作为Maven的最佳实践,一个项目应该只有一个人工制品。因此,您可以拥有multimodule项目和每个不同版本的模块,并且一次生成所有版本/人工制品作为父/聚合器构建的一部分。因此,您也不需要上述情况的任何手动干预(在运行时更改属性值或激活某个配置文件)。
父/聚合器项目可以如下所示:
...
<packaging>pom</packaging>
...
<modules>
<module>project-name-v1.2</module>
<module>project-name-v1.3</module>
</modules>
...
每个模块都是提供另一个Maven项目的子文件夹。在每个模块中,您可以清楚地定义依赖关系和所需的版本。在构建父级时,您将级联构建所有模块并立即获取所有必需的人工制品。
即。 mvn clean install
或mvn clean install -pl module-1.2version
只需构建一个模块/版本
优势:无需人工干预,关注点分离,可维护性 Disavantage :更复杂的构建(取决于习惯),审查项目的现有设计/结构。