Maven 配置文件和工件版本
Maven profile and artifact version
假设我们有 maven 多模块项目 "Foo":
Foo
|-web-module-war
|-dependency-jar
为 moduleC 定义了两个配置文件:
<profile>
<id>poll-some-external-service</id>
<properties>
<dependency-jar.poll.configured>true</dependency-jar.poll.configured>
</properties>
</profile>
<profile>
<id>produce-some-product</id>
<properties>
<dependency-jar.poll.configured>false</dependency-jar.poll.configured>
</properties>
</profile>
现在我们 运行 两个构建:
- mvn clean package -P poll-some-external-service
- mvn clean package -P produce-some-product
第一次构建产生以下工件:
web-module-war-1.0.0-poll.war
dependency-jar-1.0.0-poll.war
第二次构建产生以下工件:
web-module-war-1.0.0-produce.war
dependency-jar-1.0.0-produce.war
这意味着 war 文件 包含基于所选 配置文件 以不同方式工作的 Web 应用程序。
命名基于父pom.xml中的以下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<jarName>${project.build.finalName}${foo.build.info}</jarName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>${project.build.finalName}${foo.build.info}</warName>
</configuration>
</plugin>
如何将这些工件部署到 Nexus 中? -poll/-produce 部分在部署期间被剥离。这意味着我们有两个相同版本的不同应用程序,但我们只能部署其中一个
谢谢
使用分类器而不是更改名称
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<classifier>poll</classifier>
</configuration>
</plugin>
您的 pom 配置文件应类似于以下示例。请注意,您也必须使用配置文件更改依赖项。
<profile>
<id>poll</id>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<classifier>poll</classifier>
</configuration>
</plugin>
</plugins>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>dependency-jar</artifactId>
<classifier>poll</classifier>
</dependency>
</dependencies>
</build>
</profile>
假设我们有 maven 多模块项目 "Foo":
Foo
|-web-module-war
|-dependency-jar
为 moduleC 定义了两个配置文件:
<profile>
<id>poll-some-external-service</id>
<properties>
<dependency-jar.poll.configured>true</dependency-jar.poll.configured>
</properties>
</profile>
<profile>
<id>produce-some-product</id>
<properties>
<dependency-jar.poll.configured>false</dependency-jar.poll.configured>
</properties>
</profile>
现在我们 运行 两个构建:
- mvn clean package -P poll-some-external-service
- mvn clean package -P produce-some-product
第一次构建产生以下工件:
web-module-war-1.0.0-poll.war
dependency-jar-1.0.0-poll.war
第二次构建产生以下工件:
web-module-war-1.0.0-produce.war
dependency-jar-1.0.0-produce.war
这意味着 war 文件 包含基于所选 配置文件 以不同方式工作的 Web 应用程序。
命名基于父pom.xml中的以下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<jarName>${project.build.finalName}${foo.build.info}</jarName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>${project.build.finalName}${foo.build.info}</warName>
</configuration>
</plugin>
如何将这些工件部署到 Nexus 中? -poll/-produce 部分在部署期间被剥离。这意味着我们有两个相同版本的不同应用程序,但我们只能部署其中一个
谢谢
使用分类器而不是更改名称
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<classifier>poll</classifier>
</configuration>
</plugin>
您的 pom 配置文件应类似于以下示例。请注意,您也必须使用配置文件更改依赖项。
<profile>
<id>poll</id>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<classifier>poll</classifier>
</configuration>
</plugin>
</plugins>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>dependency-jar</artifactId>
<classifier>poll</classifier>
</dependency>
</dependencies>
</build>
</profile>