从Maven传递命令行参数作为pom.xml中的属性
是否有可能从命令行传递参数到pom.xml
文件中的属性? 例如我运行mvn ... argument
并在pom.xml中
<properties> <myproperty> here should add argument from command line</myproperty> </properties>
感谢您的帮助。
对于你的财产的例子做:
mvn install "-Dmyproperty=my property from command line"
注意整个属性定义的引号。 如果你的财产包含空格,你将需要他们。
在pom.xml里面
<project>
…..
<profiles> <profile> <id>linux64</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <build_os>linux</build_os> <build_ws>gtk</build_ws> <build_arch>x86_64</build_arch> </properties> </profile> <profile> <id>win64</id> <activation> <property> <name>env</name> <value>win64</value> </property> </activation> <properties> <build_os>win32</build_os> <build_ws>win32</build_ws> <build_arch>x86_64</build_arch> </properties> </profile> </profiles>
…..
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>target-platform-configuration</artifactId> <version>${tycho.version}</version> <configuration> <environments> <environment> <os>${build_os}</os> <ws>${build_ws}</ws> <arch>${build_arch}</arch> </environment> </environments> </configuration> </plugin>
…..
在这个例子中,当你运行没有任何参数的POM mvn clean install
默认configuration文件将执行。
当执行mvn -Denv=win64 clean install
win64configuration文件将执行。
请参考http://maven.apache.org/guides/introduction/introduction-to-profiles.html
我使用属性插件来解决这个问题。
属性在pom中定义,并写入到my.properties文件中,然后可以从Java代码访问它们。
在我的情况下,它是需要访问这个属性文件的testing代码,所以在POM中,属性文件被写入到maven的testOutputDirectory中:
<configuration> <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> </configuration>
如果您希望应用代码可以访问属性,请使用outputDirectory:
<configuration> <outputFile>${project.build.outputDirectory}/my.properties</outputFile> </configuration>
对于那些寻找一个更完整的例子(我花了一些小把戏来获得这个工作,因为我不明白属性标记的命名如何影响在Pom文件中检索它们的能力),我的POM看起来如下:
<dependencies> <dependency> ... </dependency> </dependencies> <properties> <app.env>${app.env}</app.env> <app.port>${app.port}</app.port> <app.domain>${app.domain}</app.domain> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>generate-resources</phase> <goals> <goal>write-project-properties</goal> </goals> <configuration> <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> </configuration> </execution> </executions> </plugin> </plugins> </build>
并在命令行上:
mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901
所以这些属性可以从Java代码中访问:
java.io.InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.properties"); java.util.Properties properties = new Properties(); properties.load(inputStream); appPort = properties.getProperty("app.port"); appDomain = properties.getProperty("app.domain");
您可以将variables名称作为项目文件。 例如在你的插件configuration中只给出一个标签,如下所示:
<projectFile>${projectName}</projectFile>
然后在命令行上,您可以传递项目名称作为参数: –
mvn [your-command] -DprojectName=[name of project]