使用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
命令时是否可以传递外壳变量?
答案 0 :(得分:0)
如果在Maven命令行上使用-Dname=value
定义属性,则该属性应在项目的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")
。
答案 1 :(得分:0)
非常感谢Gerold Broser提供的有关系统属性用法的详细说明。但是,我的情况有点特殊,我无法修改pom文件或测试代码。我找到了一种解决方法,首先用字符串concat之类的东西来组成整个mvn命令字符串,然后用sh运行它。