【问题标题】:Maven testResource filtering is not working in pom.xmlMaven testResource 过滤在 pom.xml 中不起作用
【发布时间】:2020-08-08 09:49:13
【问题描述】:

我正在使用 testResource 过滤 pom.xml 中的数据。但是,我没有打印数据,而是取回变量本身,如代码所示。看起来资源过滤没有发生。有人可以告诉我我在这里做错了什么以及如何纠正它。

pom.xml

<project 

  <properties>
    <local.buildNumber>${local.bhuildNumber}</local.buildNumber>
  </properties>

  <dependencies></dependencies

  <build>
    <testResources>
      <testResource>
        <directory>/src/test/java/resources</directory>
        <filtering>true</filtering>
      </testResource>
    </testResources>

        <plugins></plugins>

  </build>
</project>

global.properties

local.buildNumber=${local.buildNumber}

A.java

public void finish() throws IOException {

        Properties prop = new Properties();
        FileInputStream fileInput = new FileInputStream("src/test/java/resources/global.properties");
        prop.load(fileInput);
        String value = prop.getProperty("local.buildNumber");

        //it prints ${local.buildNumber} though I am expecting 40
        System.out.println(value); }

项目结构:

Project
-src
--main
----java
--test
----java
----resources
------global.properties
--pom.xml
--target/

【问题讨论】:

  • 首先你的目录布局看起来有点奇怪..src/test/resourcessrc/main/resourcessrc/test/javasrc/main/java 是正确的位置。此外,属性文件应该放入 src/test/resources 中如果您只想将其用于测试。此外,不要通过getClass().getResourcesAsStream("/global.properties")访问源位置...
  • @khmarbaise 项目结构已更新,但是是的,我将从 java 包中取出资源文件夹。

标签: java maven testng pom.xml maven-resources-plugin


【解决方案1】:

配置


<build>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
            </testResource>
        </testResources>
    </build>

对于加载文件,请尝试使用 ClassLoader 类:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("global.properties").getFile());
System.out.println(file.getAbsolutePath());

【讨论】:

  • 感谢您的回答。这样做有一个缺点,每次 mvn 调用我都必须传递一个变量。例如,mvn clean -Dlocal.buildNumber=40 或 mvn test -Dlocal.buildNumber=40 如果我没有在每个命令中传递变量,则会抛出 NullPointerException。有办法避免吗?
  • 是的,它现在正在工作,但产生了我刚才提到的另一个问题
  • 您可以通过默认配置文件xml &lt;profiles&gt; &lt;profile&gt; &lt;id&gt;Default&lt;/id&gt; &lt;activation&gt; &lt;activeByDefault&gt;true&lt;/activeByDefault&gt; &lt;/activation&gt; - &lt;properties&gt; &lt;local.buildnumber&gt;1&lt;/local.buildnumber&gt; &lt;/properties&gt; &lt;/profile&gt; &lt;/profiles&gt;设置默认值
猜你喜欢
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2014-04-27
  • 2016-11-07
  • 2017-03-30
  • 1970-01-01
相关资源
最近更新 更多