使用多个配置文件运行mvn release

时间:2016-02-26 10:33:19

标签: java maven

是否可以使用多个配置文件运行maven? 我有一个用@WebService注释的java类。根据maven配置文件,targetNamespace将更改。如果我运行

mvn release:prepare release:perform

两次,每次使用不同的配置文件,我将实现我想要的但是jar版本在pom版本上不会相同。 所以我认为运行2个配置文件的发布可以做到这一点。不幸的是,当我进入

-P profile-1, -P profile-2 

-P profile-1,profile-2

只执行一个配置文件。

这里ary ma个人资料:

<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>

我打印出目标命名空间属性,以验证实际上两个配置文件都在运行,而不是这种情况。 感谢

2 个答案:

答案 0 :(得分:0)

由于Maven Documentation您的第二个选项是正确的:

  

可以使用-P CLI选项显式指定配置文件。

     

此选项接受一个参数,该参数是逗号分隔的profile-id列表。指定此选项后,除了激活配置或settings.xml中的部分激活的任何配置文件外,还将激活option参数中指定的配置文件。

因此您需要使用下一个命令格式:

mvn <goals_list> -P profile-1,profile-2

如果行为不正确,POM文件中可能存在错误的配置文件配置。你能提供一下它的内容吗?

答案 1 :(得分:0)

-P profile-1,profile-2应该是正确的形式,如果它不起作用,可能是由于配置文件本身的某些冲突等。

作为替代方案,您可以尝试使用settings.xml中的<activation>标记来根据某些属性激活配置文件,例如

<activation>    
  <property>
    <name>releaseProfile</name>
  </property>     
</activation>

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