Java 无法获取<;系统属性变量>;来自pom的变量值

Java 无法获取<;系统属性变量>;来自pom的变量值,java,eclipse,windows,maven,pom.xml,Java,Eclipse,Windows,Maven,Pom.xml,您好,我正在从事一个java maven项目,其中我必须在pom.xml文件中定义一些变量 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> &l

您好,我正在从事一个java maven项目,其中我必须在pom.xml文件中定义一些变量

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.16</version>
        <configuration>
            <includes>
                <include>**/*Test*.java</include>
                <include>**/*Tests*.java</include>
                <include>**/Test*.java</include>
            </includes>
            <systemPropertyVariables>
                <my.value>NOTNULL</my.value>
            </systemPropertyVariables>
        </configuration>
    </plugin>
我在pom.xml文件中定义了一个变量,如下所示

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.16</version>
        <configuration>
            <includes>
                <include>**/*Test*.java</include>
                <include>**/*Tests*.java</include>
                <include>**/Test*.java</include>
            </includes>
            <systemPropertyVariables>
                <my.value>NOTNULL</my.value>
            </systemPropertyVariables>
        </configuration>
    </plugin>
但是控制台输出总是显示
null
,即使我设置了变量的值

有人能指出这里出了什么问题吗

提前谢谢

编辑:我还尝试在
maven故障保护插件
下声明
systemPropertyVariables
,但没有任何更改

注意:当我尝试如下转换代码的testdata行时

   String testdata = System.getProperty("my.value").toString();
我在上面一行得到一个null指针异常

编辑:很抱歉之前将此作为答案发布

我正在运行它作为JUnit测试使用插件/您提供的插件代码,但这是我的控制台输出

21 Oct 2014 12:36:56,973 main                                     INFO  s.MyClass                  - Default Implicit timeout set in Driver to: 100  
21 Oct 2014 12:36:56,973 main                                     INFO  s.MyClass                  - Default URL for server is set to: http://localhost:8080
 ---- null
URL是我试图从pom.xml文件中检索的内容,我编写的条件是

如果变量中的值为空,则返回localhost:8080,否则返回url


因此,如果您能指出这里有什么问题,我将使用
jdk1.6.0\67
Windows上的
maven-3.2.3

使用
maven原型快速启动创建了一个项目

添加了相关pom行…与上述问题中的特定行相结合

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
      <systemPropertyVariables>
        <my.value>NOTNULL</my.value>
        <buildDirectory>${project.build.directory}</buildDirectory>
      </systemPropertyVariables>
    </configuration>
  </plugin>
来自
mvn测试的相关输出

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
NOTNULL
C:\Users\raghu\Documents\GitHub\mvn-examples\test-properties\target
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec - in c
om.mycompany.app.AppTest

是github中的项目。

@Raghuram感谢您的帮助

我找到了解决这个问题的方法

在我的java文件中,@Before注释中,我将变量的值设置如下

 System.setProperty("my.value","this value");
现在它工作得很好

干杯

注意:伙计们,我很抱歉发布了另一个问题作为答案:(

您在这里无意中发现了Eclipse IDE的一个问题(该问题标记为
Eclipse

虽然Eclipse外部的
mvn test
命令的工作方式与Eclipse IDE中的“Maven test”运行配置类似,“JUnit test”运行配置与运行测试代码的Eclipse IDE完全不同。JUnit Eclipse集成(至少在我运行的JUnit版本4之前)没有与M2Eclipse插件(将Maven功能引入Eclipse的插件)集成。因此,Eclipse中的JUnit功能不了解Maven功能和viceversa。因此:

  • 在JUnit测试结果视图中看不到
    Maven测试的结果
  • JUnit不会读取您的Maven配置文件或任何其他特定于Maven的配置(如
    systemPropertyVariables
    surefire配置)
在@Raghuram的回答中,他之所以成功,是因为他正在运行
mvn测试(在Eclipse外部)或“Maven测试”(在Eclipse内部)。如果他还使用JUnit-Eclipse集成运行测试代码,他还将获得这些属性的
null

您有哪些解决方案:

  • 正如@Raghuram的回答所指出的,使用Maven运行测试有以下缺点:

    • 您不能从ui轻松地运行一个测试或一个测试包;您必须编辑Maven运行配置并在那里提供测试筛选参数
    • 您不会在JUnit视图中看到“Maven测试”结果(JUnit视图本身有一些方便的特性)
  • 使用另一个IDE(如InteliJ IDEA)有以下缺点:

    • 它不是免费的
    • 学习新的IDE
  • 使用Eclipse外部的终端运行测试,有以下缺点:

    • 您将怀念加快故障排除速度的IDE功能
    • 您不能像在IDE中那样进行调试

我从未听说过从您pom.xml访问变量。Maven是一个构建系统,与运行您的代码无关。除非您谈论的是从Maven启动的测试?@ScaryWombat我正在运行用于移动自动化的JUnit测试。我必须在任何地方指定project.build.directory吗?如果是,它的价值是什么e?我正在使用appium为移动网页自动化运行JUnit测试,所以当我以Maven测试的方式运行我的项目时,当我实例化我的AppiumDriver时,它会抛出一个错误。你知道该怎么做吗?
buildDirectory
只是一个示例值。你可以看到上面的
pom
片段,看看如何为它设置值。这就是我怀疑的。。。
 System.setProperty("my.value","this value");