首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个配置文件运行mvn发行版

使用多个配置文件运行mvn发行版
EN

Stack Overflow用户
提问于 2016-02-26 10:33:19
回答 3查看 873关注 0票数 0

可以使用多个配置文件运行maven吗?我有一个带有@WebService注释的java类。根据maven配置文件的不同,targetNamespace将发生变化。如果我运行

代码语言:javascript
复制
mvn release:prepare release:perform

两次,每次使用不同的配置文件,我将实现我想要的,但jar版本将不一样的pom版本。所以我想用两个配置文件运行这个版本就可以了。不幸的是当我进入

代码语言:javascript
复制
-P profile-1, -P profile-2 

代码语言:javascript
复制
-P profile-1,profile-2

只执行一个配置文件。

在此,我要介绍一下:

代码语言:javascript
复制
<profiles>
  <profile>
    <id>profile-1</id>
    <properties>
        <target-namespace>sample-1.org</target-namespace>
    </properties>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <phase>clean</phase>
                        <configuration>
                            <target>
                                <echo>${target-namespace}</echo>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

<profile>
    <id>profile-2</id>
    <properties>
        <target-namespace>sample-2.org</target-namespace>
    </properties>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <phase>clean</phase>
                        <configuration>
                            <target>
                                <echo>${target-namespace}</echo>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

我确实打印了目标名称空间属性,以验证实际上这两个配置文件都在运行,但情况并非如此。谢谢

EN

回答 3

Stack Overflow用户

发布于 2022-11-27 07:59:23

第二个命令行(以逗号分隔的概要文件)更正确,但鉴于您的pom,它不会完全完成您想要做的操作。

当您指定多个配置文件时,它们都在同一个maven进程中处于活动状态--这并不意味着“使用第一个配置文件运行每个目标,然后再用第二个配置文件运行每个目标”。因此,在您正在运行的命令中,maven试图在两个配置文件都处于活动状态下运行。

不幸的是,您的配置文件的内容是重叠的。好吧,这些房产。<build>部分在每个部分都是相同的,这意味着它甚至可以被移出配置文件之外,只声明一次。

<properties>是完全重叠的..。希望target-namespace属性不能同时拥有两个不同的值。

下面我为一些解决这个属性问题的方法写了一个答案,这个问题是以一种非常普遍的方式提出的。但老实说,对于任何读过这篇文章的人来说,也许还有其他更好的方法来完成你真正想要做的事情。OP显然试图做一些更具体的事情,而这个多重配置文件是他们决定尝试的方法,但是当它不起作用时,他们感到困惑。一个关于如何最好地解决他们实际的具体问题的问题可能是一个更有成效的问题。不过,万一这是解决你问题的好办法,就这样吧。

为了便于讨论,我将忽略上面的<build>内容,这些内容看起来完全是荒谬的,并且假设您需要单独的配置文件,因为有时您希望独立地激活每个配置文件(可能在不运行release时)。

不能一次对同一属性使用两个值。您需要将多个执行改为多个。你有几个不同的选择。

  1. 多个命令。pom不需要更改,但这需要配置文件对release:prepare中的操作没有真正的适用性,您将只运行一次。如果不是这样的话,这是行不通的。前两个命令可以合并为一个命令,但第三个命令必须是分开的: mvn发行版:准备mvn发行版:执行-P配置文件-1 mvn发行版:执行-P配置文件-2。
  2. 发布插件本身的多个<executions>,每个插件中都有不同的releaseProfiles。这是选项1的一个小的变化,但可能更有吸引力取决于您的需要:发布插件id-1配置文件-1 id-2配置文件-2. 因为发布插件不绑定到任何阶段(直接运行它),所以必须在命令行中分别指定这两种执行,比如mvn release:prepare release:perform@id-1 release:perform@id-2
  3. 在每个配置文件中使用唯一的插件执行id --然后像往常一样运行mvn release:prepare release:perform -P profile-1,profile-2。您还必须更改配置文件,以便它们使用不同的属性名称。例如..。侧写-1样本-1.org.${命名空间-1}.侧写-2样本-2.org.${命名空间-2} ..。这假设所有插件的执行都是这样的,在整个构建的每个阶段都可以按这样的循环顺序运行(clean阶段= antrun 1然后antrun 2;test阶段= surefire 1,然后是surefire 2;等等)。
票数 1
EN

Stack Overflow用户

发布于 2016-02-26 10:40:55

由于Maven文档,您的第二个选项是正确的:

可以使用-P CLI选项显式指定配置文件。 此选项接受一个参数,该参数是要使用的以逗号分隔的配置文件ids列表。当指定此选项时,除通过其激活配置或settings.xml中的区段激活的任何配置文件外,还将激活选项参数中指定的配置文件。

因此,您需要使用next命令格式:

代码语言:javascript
复制
mvn <goals_list> -P profile-1,profile-2

如果行为不正确,POM文件中可能会出现配置文件配置错误。请你提供它的内容好吗?

票数 0
EN

Stack Overflow用户

发布于 2016-02-26 10:47:13

-P profile-1,profile-2应该是正确的形式,如果它不能工作,它可能是由于一些冲突等在概要文件本身。

作为另一种选择,您可以尝试使用settings.xml中的settings.xml标记来激活基于某些属性的配置文件。

代码语言:javascript
复制
<activation>    
  <property>
    <name>releaseProfile</name>
  </property>     
</activation>

然后在mvn调用中设置属性:mvn -DreleaseProfile release:prepare release:perform。(您可能必须为该属性传递一个值,我已经有一段时间没有使用该值了)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35649372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档