当前位置: 首页 > 知识库问答 >
问题:

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

酆阳煦
2023-03-14

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

示例(已编辑):我有一个maven项目MyArtifact,在pom.xml中有两个配置文件(P1和P2),它们会生成两个不同的EAR。每个配置文件配置maven-ear-plugin以包括不同的模块并自动生成application.xml。生成的工件是myArtifact-1.0-p1.ear(2个war模块)和myArtifact-1.0-p2.ear(3个war模块)。

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

    null

问题2(maven-release-plugin):

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

共有1个答案

解阳泽
2023-03-14

简单的回答。这不可能.这个问题是基于配置文件的使用,这些配置文件在这种关系中是邪恶的。

解决这类问题的方法是创建一个Maven构建,它能够生成两个war文件,这两个文件是这个构建的结果。

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

.
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |-- resources
    |   |-- environment
    |   |   |-- test
    |   |   |   `-- database.properties
    |   |   |-- qa
    |   |   |   `-- database.properties
    |   |   `-- production
    |   |       `-- database.properties
    |   `-- webapp
<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文件,其名称如下:

    null
 类似资料:
  • 我正在开发一个运行在Tomcat上的Java/JavaScript webapp。 我们正在使用IDEA,我已经设法同时为客户端和服务器代码设置了调试,这很棒。在手动运行Tomcat时,我确实重新部署了javascript的设置,但是我发现在通过IDEA运行Tomcat时,这并不起作用,因为它正在我的用户文件夹中的某个地方设置东西。 我本来要设置一个部署配置去那个文件夹,但是我看不到里面的任何ja

  • 我试图在我的项目pom中使用配置文件。xml文件,用于控制将我的war文件部署到特定服务器。例如,我有一个本地配置文件和一个开发服务器配置文件。下面是我如何设置个人资料的 我打电话来 当我尝试此操作时,我可以看到,它不是尝试连接到我的配置中提供的IP地址,而是尝试连接到。我在本地包含用户名和密码的文件。 如果我然后添加选项,以获得更多信息,我可以在插件的调试输出中看到(强调部分已添加) 似乎没有遵

  • 目前,我正在将多个war文件部署到一个Tomcat容器中。是否可以使用Spring Boot将所有war文件放入单个可部署的JAR中?我知道这对于一个应用程序是可能的,但是部署多个应用程序,这些应用程序曾经在单独的war文件中,这可以做到吗?

  • 我有maven surefire插件pom.xml: 现在我希望maven只在部署目标上执行测试,因此: 当执行mvn部署测试应该运行 当执行mvn包或mvn安装时,测试不应该运行,因为目标在部署之前

  • null 现在,当我使用mvn从Jenkins内部运行maven release插件时,我仍然得到以下信息: 不显示错误 按预期创建SVN标记 然后在部署期间,它失败,出现上述错误 正如我提到的,快照部署经常发生并且没有错误,因此settings.xml、distributionManagement和Nexus权限似乎都是正常的。 我能够手动访问 我已经用和进行了检查,似乎一切正常 有什么想法吗?

  • 问题内容: 我正在尝试根据某个Maven配置文件是否处于活动状态来使用数据库信息配置Spring配置文件。我已经看到了一些答案,但是很难将它们放在一起。 我有一个这样的Maven个人资料: 还有一个settings.xml文件,如下所示: 并在servlet-context.xml中: 我的问题基本上是,如何将Maven属性放入servlet- context.xml文件中?我需要一个.prope