当前位置: 首页 > 面试题库 >

从Maven传递Java参数

阳航
2023-03-14
问题内容

我需要使用Maven执行一些测试,并从命令行传递参数。

我的Java代码应获取以下参数:System.getenv(“ my_parameter1”);

并以下面的示例在pom.xml文件中定义参数:(和后者,我将修改pom.xml以从公共行mvn clean install -Dmy_parameter1
= value1获取参数)

但它不起作用;System.getenv(“ my_parameter1”)返回null。我应该如何在pom.xml文件中定义参数?

pom.xml

<project>
  ...
  <profiles>
    <profile>
      <properties>
        <my_parameter1>value1</my_parameter1>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>slowTest</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>false</skip>
                  <includes>
                    <include>**/*Test.java</include>
                    <include>**/*TestSlow.java</include>
                  </includes>
                  <properties>
                    <my_parameter1>value1</my_parameter1>
                  </properties>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

问题答案:

System.getenv()读取
环境变量 ,例如PATH。您要读取的是 系统属性 。-D [系统属性名称] = [值]用于系统属性,而不用于环境变量。

您有两种选择:

  1. 如果要使用环境变量,请my_parameter1在启动Maven之前使用特定于操作系统的方法来设置环境变量。在Windows中,请set my_parameter1=<value>在’nix中使用export my_parameter1=<value>

  2. 您可以使用System.getProperty()从代码中读取系统属性值。

例:

String param = System.getProperty("my_parameter1");

在您的surefire插件配置中,您可以使用:

<configuration>
    <systemPropertyVariables>
        <my_property1>${my_property1}</my_property1>
    </systemPropertyVariables>
</configuration>

它采用Maven属性_my_property1_并在测试中进行设置。

关于这个的更多细节在这里。

我不确定Maven的系统属性是否会自动传递给测试和/或fork模式是否会影响这种情况的发生,因此最好将它们显式传递。



 类似资料:
  • 问题内容: 我们已经设置了一些参数来在Jenkins中执行构建(使用简单的“参数化构建”设置)。作业被设置为Maven测试。有没有办法以编程方式将这些参数传递到我们的Java代码中?我们需要基于通过Jenkins设置的参数来执行某些更新功能。 问题答案: 是的,您可以通过Maven执行将Jenkins参数传递给Java代码,如下所示: 请注意, $ JOB_PARAM_1 将捕获Jenkins上设

  • 问题内容: 我正在尝试使用Maven释放一个库并执行站点部署来sourceforge(我首先创建了一个交互式shell)。该发布由Jenkins作业完成(使用Jenkins的Maven发布插件)。 我试过了: 和 但两次工作都挂在site:第一个模块的部署: 当我停止工作时,将在最后打印以下内容: 这可能意味着$ {username}尚未解析。 如何解析$ {username}? 编辑: 请注意以

  • 我需要传递以下价值观… exeEvironment(测试环境),testGroup(testNG中的组) 从命令行->POM->TestNG->测试用例。 基于这两个帖子.... 从maven传递一个Java参数 如何从Surefire Maven插件向guicified TestNG测试传递参数? 我做了以下配置.. 在surefire插件中,我尝试了两个选项,但似乎都不起作用。 ===== (

  • 问题内容: 我正在寻找一种从Java调用exe并传递特定参数的机制。我能怎么做? 先前的代码有效。但是我无法在中传递参数。MyExe.exe接受参数。另一个问题是PathToExe有空格。ProcessBuilder似乎无法正常工作。例如: 谢谢。 问题答案: 在构造函数本身中传递参数。

  • 问题内容: 我在很多地方都看到过,包括Python使用的Python文档通过“赋值”语义传递。来自Java背景,说“ Java按值传递基元,按引用传递对象”的常见错误是由于按值传递了对象引用,我不禁怀疑Python是否真的在做同样的事情事情。 在我看来,按值传递对象引用和按赋值传递对象的概念似乎相同。Python使用术语“传递分配”是否是为了减轻诸如我上面所述的错误语句的问题?如果是这样,可以公平

  • 使用sonar hudson和maven设置代码分析我的计划是每天运行分析,因此我尝试在hudson中传递参数,如下所示: 而不是每天手动输入/更改日期——有没有办法让它成为一个每天自动更改的参数?谢谢满足