【问题标题】:How to pass shell variable or enviroment variable to Maven when run mvn test for MariaDB Connector J为 MariaDB Connector J 运行 mvn 测试时如何将 shell 变量或环境变量传递给 Maven
【发布时间】:2019-04-09 09:21:21
【问题描述】:

使用 Maven 为 MariaDB 连接器 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


【解决方案1】:

如果您在 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")

【讨论】:

  • 您好 Gerold,非常感谢您对系统属性使用的详细说明。但是,我的情况有点特殊,我无法修改 pom 文件或测试代码。我找到了一种解决此问题的方法,方法是先组成整个 mvn 命令字符串,然后使用 sh 运行它。请问如果我无法修改pom文件或测试代码,这是唯一的方法吗?非常感谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多