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

2022-09-01 22:02:14

我有几个小时的问题,我尝试了我在教程中找到的所有解决方案。这很简单:我无法访问资源文件。我试图打开一个文件,我已经放入和.src/main/resourcessrc/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 构建>流程-测试-资源中运行
  • 以 Maven 生成>编译>运行

与环境:本地

在测试中,我这样做:以 Junit 测试用例>运行。但它失败了...我查看了Maven生成的目标/测试类目录,文件测试.txt就在那里。

在项目编译期间,我是否遗漏了一些步骤,或者我的配置是否存在问题?

编辑:
我也尝试过。File("test.txt")File("../test.txt")


答案 1

在我看来,你的问题是

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

这是在计算机文件系统的根目录中调用的文件。你想要的是资源树的根,你可以使用getResource方法获得它:test.txt

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

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

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

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


答案 2

在pom中检查你的标签.xml它应该是这样的东西,面对同样的问题,并在为我工作中添加这个标签。<build><resources><build>

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

推荐