it-swarm.com.ru

Невозможно получить доступ к файлам в каталоге ресурсов с 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 build> Процесс-ресурсы
  • Выполнить как> сборка Maven> process-test-ressources
  • Выполнить как> Maven build> compile

С env: LOCAL

В тесте я делаю: Run as> Junit Test Case . Но это не удалось ... Я посмотрел в каталог target/test-classes, сгенерированный Maven, и там есть файл test.txt.

Я пропустил некоторые шаги во время компиляции моего проекта, или есть проблема с моей конфигурацией?

Правка:
Я пробовал также с File("test.txt") и File("../test.txt").

21
Iraes

Мне кажется, что ваша проблема

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() );

Конечно, вам нужно добавить обработку ошибок в этот пример.

39
Sam Hanes

У меня была такая же проблема, просто убедитесь, что файл "text.txt" находится в папке ресурсов тестового проекта (src/test/resources/text.txt), а не в какой-либо другой папке ресурсов .... Вы должны извлечь файл из папки ресурсов следующим образом:

this.getClass().getClassLoader().getResource("text.txt").getFile();

Если это по-прежнему не работает, попробуйте установить useSystemClassLoader из maven-surefire-plugin в false в вашем pom.xml.

http://maven.Apache.org/surefire/maven-surefire-plugin/examples/class-loading.html

4
Marco

Проверьте тэг <build> в pom.xml, он должен быть примерно таким, столкнулся с той же проблемой, и добавление этого тэга <resources> в <build> сработало для меня.

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>
3
Vandit Upadhyay

Я сделал этот метод для этой работы:

public static String getPropaccess(String key){
    String value="";
    Properties configFile = new Properties();
    try {
        configFile.load(Propaccess.class.getClassLoader().getResourceAsStream("test/resources/config.properties"));
        value = configFile.getProperty(key);
        return value;
    } catch (IOException e) { 
        e.printStackTrace();
    }
    return value;
}
0
Abhimanyu Shekhawat