为了账号安全,请及时绑定邮箱和手机立即绑定

从Maven传递命令行参数作为pom.xml中的属性

/ 猿问

从Maven传递命令行参数作为pom.xml中的属性

至尊宝的传说 2019-11-15 12:58:49

是否可以将命令行参数传递给pom.xml文件中的属性?例如我跑mvn ... argument


并在pom.xml中


<properties>

   <myproperty> here should add argument from command line</myproperty>

</properties>

感谢您的帮助。


查看完整描述

3 回答

?
慕侠2389804

对于您的财产示例,请执行以下操作:


mvn install "-Dmyproperty=my property from command line"

注意围绕整个属性定义的引号。如果您的媒体资源包含空格,则将需要它们。


查看完整回答
反对 回复 2019-11-15
?
慕雪9262066

内部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将执行默认配置文件。


当执行 mvn -Denv=win64 clean install


win64配置文件将被执行。


请参考http://maven.apache.org/guides/introduction/introduction-to-profiles.html


查看完整回答
反对 回复 2019-11-15
?
跃然一笑

我使用属性插件来解决此问题。


属性在pom中定义,并写到my.properties文件中,然后可以从Java代码中访问它们。


就我而言,是测试代码需要访问该属性文件,因此在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");


查看完整回答
反对 回复 2019-11-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信