2014-10-20 63 views
1

我在我的maven.properties文件中有以下行。Java無法讀取pom變量

MY_VARIABLE = www.google.com 

我的POM文件的代碼如下所示

<build> 

    <pluginManagement> 
     <testResources> 
      <testResource> 
       <directory>src/test/resources</directory> 
       <filtering>true</filtering> 
      </testResource> 
     </testResources> 
     <plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.16</version> 

       <executions> 
        <execution> 
         <phase>validate</phase> 
         <goals> 
          <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
          <includes> 
           <include>**/*Test*.java</include> 
           <include>**/*Tests*.java</include> 
           <include>**/Test*.java</include> 
          </includes> 
          <files> 
           <file>src/test/resources/maven.properties</file> 
          </files> 

          <systemPropertyVariables> 
           <message>${MY_VARIABLE}</message> 
          </systemPropertyVariables> 

         </configuration> 
        </execution> 
       </executions> 

      </plugin> 


      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.16</version> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

最後我有一段代碼來檢索在消息變量的值。

public static String getMsg() 
    { 
     final String msg = System.getProperty("message"); 
     if (StringUtils.isEmpty(msg) || url.startsWith("${")) 
     { 
      return "Empty message"; 
     } 
     return msg; 
    } 

因此,當我調用getMsg()方法時,它始終將msg的值作爲空消息返回。

它在pom.xml聲明中出現了一些錯誤,或者它在使用的getMsg()函數中存在一些問題。

這將是很好的人可以拋出一些光。

在此先感謝....

回答

1

如果我沒有記錯的話,你需要使用下面的語法

<properties> 
    <message>${MY_VARIABLE}</message> 
</properties> 

systemPropertyVariables都爲神火pluging,單元測試

+0

我這裏有一個疑問,因爲MY_VARIABLE在maven.properties文件,該文件是在另一個目錄中(src /測試/資源),如果我直接這樣做將它不會引發錯誤聲明.. 我如何導航到目錄? – Ram 2014-10-20 11:33:03

+0

一個問題可能是您使用錯誤的插件進行單元測試。來自maven站點「Failsafe插件旨在運行集成測試,而Surefire插件旨在運行單元測試。」如果您打算運行單元測試,則可能需要更改爲Surefire插件。 – 2014-10-20 11:47:05

+0

感謝您的回覆,但它不能與surefire插件一起工作.. :( – Ram 2014-10-20 11:51:05

0

前段時間我遇到了這個問題。我不知道它是否是故障安全/ maven bug或限制。我找到的解決方案是將該變量設置爲VM參數。下面是它目前是如何工作對我來說:

更新你的pom如下:

    <plugin> 
         <artifactId>maven-failsafe-plugin</artifactId> 
         <version>2.17</version> 
         <configuration> 
          <argLine>-DMY_VARIABLE=${MY_VARIABLE}</argLine> 
         </configuration> 
         <executions> 
          <execution> 
           <phase>test</phase> 
           <goals> 
            <goal>integration-test</goal> 
            <goal>verify</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 

然後,你可以調用行家,讓您的集成測試運行如下: MVN集成測試-DMY_VARIABLE = WWW .google.com

+0

我不熟悉從命令行運行maven我正在使用它爲我的JUnit移動自動化腳本,所以你可以進一步解釋一下。 – Ram 2014-10-20 11:35:15

+0

請參閱我的更新。 – 2014-10-20 12:01:12

+0

再次感謝您提出一個問題。 因爲MY_VARIABLE在另一個文件中,我如何訪問它。 – Ram 2014-10-20 12:02:38

0

謝謝你們的幫助..

我找到了一種方法來完成這件事。

之前,我開始測試,在我的java文件我使用

System.setProperty("message" , "welcome message"); 

,這是最後打印出的值,而不是空。

乾杯