web-dev-qa-db-fra.com

Impossible d'accéder aux fichiers du répertoire des ressources avec Maven (avec Eclipse IDE)

J'ai un problème pendant quelques heures et j'ai essayé toutes les solutions trouvées dans les tutoriels… .. C'est simple: je ne peux pas accéder aux fichiers de ressources. J'essaie d'ouvrir un fichier que j'ai mis dans src/main/resources et src/test/resources.

J'ai un projet Java simple et j'utilise Maven, avec Eclipse comme IDE, avec le plugin m2e . Je souhaite utiliser le filtrage des ressources avec Maven, avec différents profils, et voici mon 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>

Et j’ai fait un test simple, sous src/Java/test:

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

Donc, dans Eclipse, je lance (dans mon dossier de projet, dans la vue des paquets):

  • Exécuter en tant que> Maven Build> Process-Resources
  • Exécuter en tant que> Maven build> process-test-ressources
  • Exécuter en tant que> compilation Maven> compiler

Avec env: LOCAL

Dans le test, je fais: Exécuter en tant que> Junit Test Case . Mais cela échoue ... J'ai cherché dans le répertoire target/test-classes généré par Maven, et le fichier test.txt est présent.

Ai-je oublié certaines étapes lors de la compilation de mon projet ou existe-t-il un problème de configuration?

MODIFIER:
J'ai aussi essayé avec File("test.txt") et File("../test.txt").

21
Iraes

Il me semble que ton problème est

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

Cela cherche un fichier appelé test.txt à la racine du système de fichiers de votre ordinateur. Ce que vous voulez, c'est la racine de l'arbre des ressources, que vous obtenez avec la méthode getResource :

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

Ou, dans un contexte statique, utilisez le nom de la classe contenante:

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

Bien entendu, vous devrez ajouter la gestion des erreurs à cet exemple.

39
Sam Hanes

J'ai eu le même problème, assurez-vous que le fichier "text.txt" se trouve dans le dossier des ressources du projet test (src/test/resources/text.txt) et non dans un autre dossier de ressources ... vous devriez récupérer le fichier depuis le dossier de ressources comme ceci:

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

Si cela ne fonctionne toujours pas, essayez de définir la variable useSystemClassLoader du maven-surefire-plugin sur false dans votre pom.xml.

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

4
Marco

Vérifiez votre balise <build> dans pom.xml, cela devrait ressembler à ceci, face au même problème et ajouter cette balise <resources> dans le <build> a fonctionné pour moi.

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

J'ai fait cette méthode pour ce travail:

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