0

同じアプリケーションの 2 つの派生物、たとえばバージョン (A) と (B) があります。それぞれにプロジェクトが含まれています: (1) を含む test-data-war、 (2)およびtarget/test-classes/log4j.propertiesを含む test-kernel 。target/test-classes/log4j.propertiestarget/test-classes/test.properties

Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceName);(1) で特定の jUnit テストを実行すると、(2) で(A)を呼び出すメソッドが呼び出さ resourceNameれ、「log4j.properties」として、結果は (1) のパスで null ではなく、resourceName「test.properties」としてnullです。(B) では、resourceName「log4j.properties」として (1) のパスで null ではなくresourceName、「test.properties」として (2) のパスで null ではありません。

Thread.currentThread().getContextClassLoader().getResourceAsStream("test.properties");(A) に nullがあるのはなぜですか? 最初はクラスパスが違うのではないかと思っていましたが、(1)も(2)も同じです。

編集: (1) の .classpath ファイルは次のようになります。

<?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>

(2) の .classpath ファイルは次のようになります。

<?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>
4

2 に答える 2

1

module のテスト クラスパスからのリソースは、 moduletest-kernelには表示されませんtest-data-warsrc/main/resourcesモジュールは、リソースを依存関係として別のモジュールに追加する場合にのみ、リソースをエクスポートします。

紛らわしいのは、Eclipse と Maven がここで意見を異にしていることです。Eclipse では、モジュールのクラスパス全体が表示されます (テスト リソースも)。しかし、Maven で同じテストを実行すると、テスト リソースが突然なくなります。これは、Eclipse に「テスト クラスパス」という概念がないためです。

違いがある場合は、モジュールmvn dependency:treeのファイルを確認する必要があります。pom.xml

于 2015-03-27T13:48:35.310 に答える