当使用Maven为MariaDB Connector J运行测试时,您可以使用dbUrl
选项指定dbUrl
,如下所示:
mvn -DdbUrl="jdbc:mysql://myhost:3306/testj?user=myuser&password=mypassword" package
我的问题是如何在从shell运行时动态传递dbUrl
值,即如下所示:
export myUrl="abcd"
mvn -DdbUrl=$myUrl package
但这不起作用。请问在使用mvn
命令时有没有办法传递shell变量?
如果使用-Dname=value
在Maven命令行上定义属性,则意味着在项目的POM中使用它。 (顺便说一句,您也可以使用${env.<variable name>}
直接访问环境变量)。
要将系统属性传递给测试代码,可以使用Maven Surefire Plugin test
goal's parameter <systemPropertyVariables>
:
<systemPropertyVariables>
要传递给JUnit测试的系统属性列表。
根据Using System Properties的例子:
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<systemPropertyVariables>
<dbUrl>${dbUrl}</dbUrl> <!-- if defined on Maven cmd line -->
<!-- <dbUrl>${env.myUrl}</dbUrl> if defined as env variable -->
</systemPropertyVariables>
</configuration>
</plugin>
...
然后在代码中使用System.getProperty("dbUrl")
。
非常感谢Gerold Broser对系统属性使用的详细说明。但是,我的情况有点特殊,我无法修改pom文件或测试代码。我已经找到了一种方法来解决这个问题,首先通过类似字符串连接的方式组成整个mvn命令字符串,然后用sh运行它。