使用Maven(使用Eclipse IDE)无法访问资源目录中的文件


问题内容

我有几个小时的问题,我尝试了在教程中找到的所有解决方案。很简单:我无法访问资源文件。我尝试打开已放入src/main/resources和的文件src/test/resources

我有一个简单的Java项目,并且使用Maven(带有Eclipse作为IDE)和m2e插件。我想在Maven中使用具有不同配置文件的资源过滤功能,这是我的POM.xml

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.3.2</version>
      <configuration>
    <source>1.5</source>
    <target>1.5</target>
    <debug>false</debug>
    <optimize>true</optimize>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.4</version>
      <configuration>
    <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </plugins>

  <filters>
    <filter>src/main/filters/${env}.properties</filter>
  </filters>

  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
    <resource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

<profiles>
  <profile>
    <id>LOCAL</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <env>local</env>
    </properties>
      </profile>
</profiles>

我在src / java / test中做了一个简单的测试:

@Test
public void testOpenResourceFile() {
    File testf=new File("/test.txt");
    assertTrue(testf.exists());
}

因此,在Eclipse中,我运行了(在我的项目文件夹中的包视图中):

  • 运行方式> Maven构建>流程资源
  • 运行为> Maven build> process-test-ressources
  • 运行为> Maven构建>编译

与环境:本地

在测试中,我这样做:运行方式> Junit测试用例。但是它失败了……我在Maven生成的target / test-
classes目录中查找了文件test.txt。

我在项目的编译过程中是否错过了一些步骤,还是我的配置有问题?

编辑:
我尝试了File("test.txt")File("../test.txt")


问题答案:

在我看来,您的问题是

File testf = new File( "/test.txt" );

正在寻找一个test.txt位于计算机文件系统根目录的文件。您想要的是资源树的根,可以通过以下getResource方法获得:

File testf = new File( this.getClass().getResource( "/test.txt" ).toURI() );

或者,在静态上下文中,使用包含类的名称:

File testf = new File( MyClass.class.getResource( "/test.txt" ).toURI() );

当然,您需要在该示例中添加错误处理。