gpt4 book ai didi

maven - 禁用重新部署时如何 Maven 发布多个配置文件项目

转载 作者:行者123 更新时间:2023-12-05 08:44:06 25 4
gpt4 key购买 nike

问题:当在 Nexus 上禁用重新部署时,我应该如何发布具有 2 个独占配置文件的 Maven 项目?

示例(已编辑):我有一个 Maven 项目 MyArtifact,在 pom.xml(P1 和 P2)中有 2 个配置文件,它生成 2 个不同的耳朵。每个配置文件配置 maven-ear-plugin 以包含不同的模块并自动生成 application.xml。生成的 Artifact 是 MyArtifact-1.0-P1.ear(2 个 war 模块)和 MyArtifact-1.0-P2.ear(3 个 war 模块)。

问题 1(重新部署到 nexus):

  1. 当我执行“mvn deploy -P P1”时一切正常(war 和 pom 部署到 Nexus)
  2. 当我执行“mvn deploy -P P2”时出错! Nexus 提示重新部署 pom.xml。

问题2(maven-release-plugin):

当使用 maven-release-plugin 发布多个配置文件时,maven 会做很多事情( checkout 和标记 CSM、更新 pom 版本、转向标记、提交到 CSM 等) ...)。至少必须为每个配置文件执行重新发布/重新标记既不高效也不实用。

最佳答案

简单的回答。这是不可能的。问题是基于在这种关系中使用有害的配置文件。

此类事情的解决方案是创建一个 Maven 构建,它能够生成两个 war 文件,这是该构建的结果。

我假设您对不同的环境有不同的属性,如下所示:

.
|-- pom.xml
`-- src
|-- main
| |-- java
| |-- resources
| |-- environment
| | |-- test
| | | `-- database.properties
| | |-- qa
| | | `-- database.properties
| | `-- production
| | `-- database.properties
| `-- webapp

这意味着您需要在您的案例中创建两个 war 文件,它们仅在属性文件的内容上有所不同。在上面有三个环境。

您需要的是每个环境的程序集描述符,例如:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

<id>test</id>
<formats>
<format>war</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<useProjectArtifact>true</useProjectArtifact>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<outputDirectory>WEB-INF</outputDirectory>
<directory>${basedir}/src/main/environment/test/</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
</fileSets>
</assembly>

在这种情况下,maven-assembly-plugin 的适当执行如下所示:

 <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/test.xml</descriptor>
</descriptors>
</configuration>
</execution>
<execution>
<id>qa</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/qa.xml</descriptor>
</descriptors>
</configuration>
</execution>
<execution>
<id>production</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/production.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>

这将通过以下方式运行一次 maven:

mvn package

这会生成三个不同的 war 文件,其中包含不同的属性文件或具有不同内容的文件。这是没有配置文件的解决方案,可以完美运行,并将部署三个不同的 war 文件,这些文件将被命名为:

  1. artifactId-version-test.war
  2. artifactId-version-qa.war
  3. artifactId-version-production.war

这就是您解决问题所需的结果。

关于maven - 禁用重新部署时如何 Maven 发布多个配置文件项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com