是否可以使用多个配置文件运行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>
我打印出目标命名空间属性,以验证实际上两个配置文件都在运行,而不是这种情况。 感谢
答案 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
。 (您可能必须为该属性传递一个值,因为我使用它已经有一段时间了。)