J'ai deux dérivées de la même application, disons les versions (A) et (B). Ils contiennent chacun des projets: (1) test-data-war, qui a target/test-classes/log4j.properties
, et (2) test-kernel, qui a target/test-classes/log4j.properties
et target/test-classes/test.properties
.getResourceAsStream renvoie null dans un cas mais pas un autre, avec les mêmes chemins de classe
Quand je lance un test JUnit spécifique (1), il appelle un procédé (2) qui appelle Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceName);
In (A), avec resourceName
comme "log4j.properties", le résultat est non nul avec un trajet dans (1), mais avec resourceName
comme "test.properties", il est nul. Dans (B), avec resourceName
comme "log4j.properties", il n'est pas null avec un chemin dans (1) et avec resourceName
comme "test.properties" il n'est pas nul avec un chemin dans (2).
Pourquoi Thread.currentThread().getContextClassLoader().getResourceAsStream("test.properties");
est-il nul en (A)? Au début, je pensais que les classpaths pouvaient être différents, mais ils sont les mêmes pour (1) et (2).
EDIT: Voici ce que le fichier .classpath ressemble pour (1):
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" pat h="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Voici ce que le fichier .classpath ressemble pour (2):
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Vous devez vérifier toutes vos affirmations, y compris la présence de ces fichiers dans les fichiers JAR et les chemins de classe. – EJP
Je ne vois pas les fichiers dans les fichiers JAR cible de (A) ou (B), mais les fichiers ".classpath" sont les mêmes pour différentes versions. – spooky655