针对MariaDB连接器J运行mvn测试时,如何将外壳变量或环境变量传递给Maven。

时间:2019-04-09 09:21:21

标签: maven mariadb

使用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命令时是否可以传递外壳变量?

2 个答案:

答案 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运行它。