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):
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")
.
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.
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
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>
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;
}