如何在运行MariaDB Connector J的mvn test时将shell变量或环境变量传递给Maven

问题描述 投票:0回答:2

当使用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变量?

maven mariadb
2个回答
0
投票

如果使用-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")


0
投票

非常感谢Gerold Broser对系统属性使用的详细说明。但是,我的情况有点特殊,我无法修改pom文件或测试代码。我已经找到了一种方法来解决这个问题,首先通过类似字符串连接的方式组成整个mvn命令字符串,然后用sh运行它。

© www.soinside.com 2019 - 2024. All rights reserved.