Maven test-jar: src/test/resources/文件存在,但无法通过测试找到



我有一个像

这样的模块结构
external_services/pom.xml
                 ifs/pom.xml
                     src/main/java
                     src/main/java/resources
                     src/test/java
                     src/test/java/resources/sample.json
inventory/pom.xml
         ifs/pom.xml
            src/main/java
            src/main/java/resources
            src/test/java/MyTest.java

在这个MyTest.java中,我需要得到sample.json,因为我想让它被共享,所以在business/pom.xml中,我添加了以下

       <dependency>
            <groupId>com.org.my_services.external_services</groupId>
            <artifactId>ifs</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>

所以现在当我运行测试时,我看到

file:/Users/harith/.m2/repository/com/org/my_services/external_services/ifs/1.0-SNAPSHOT/ifs-1.0-SNAPSHOT-tests.jar!/sample.json (No such file or directory)

然而,当我查看jar ifs-1.0-SNAPSHOT-tests.jar时,我看到它在那里

jar -tvf /Users/harith/.m2/repository/com/org/pryme_services/federated_services/ifs/1.0-SNAPSHOT/ifs-1.0-SNAPSHOT-tests.jar
     0 Wed May 07 09:47:36 PDT 2014 META-INF/
   131 Wed May 07 09:47:34 PDT 2014 META-INF/MANIFEST.MF
     0 Wed May 07 09:47:34 PDT 2014 com/
     0 Wed May 07 09:47:34 PDT 2014 com/org/
     0 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/
     0 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/
     0 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/
     0 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/configuration/
   892 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/configuration/DevelopmentContextConfiguration.class
   888 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/configuration/ProductionContextConfiguration.class
  2381 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/IFSClientTest.class
  1422 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/InventoryRESTClientTest.class
  1033 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/MockIfsClient$1.class
  2350 Wed May 07 09:47:34 PDT 2014 com/org/pryme_services/external_services/ifs/MockIfsClient.class
142315 Wed May 07 09:47:34 PDT 2014 sample.json   // <-- here
     0 Wed May 07 09:47:36 PDT 2014 META-INF/maven/
     0 Wed May 07 09:47:36 PDT 2014 META-INF/maven/com.org.pryme_services.federated_services/
     0 Wed May 07 09:47:36 PDT 2014 META-INF/maven/com.org.pryme_services.federated_services/ifs/
  2391 Wed May 07 09:45:36 PDT 2014 META-INF/maven/com.org.pryme_services.federated_services/ifs/pom.xml
   138 Wed May 07 09:47:34 PDT 2014 META-INF/maven/com.org.pryme_services.federated_services/ifs/pom.properties

在类中使用的方式是

inventoryPriceDetails = mapper.readValue(new File(getClass().getResource("/getInventoryAndPrice.json").getPath()), new TypeReference<List<InventoryPriceDetail>>() {
            });

我不知道我错过了什么,有人可以帮助吗?

有两件事:

1)external_services/pom.xmlifs/pom.xmlsrc/main/javasrc/main/java/资源src/测试/javasrc/测试/java/资源/sample.json

但是maven期望external_services/pom.xmlifs/pom.xmlsrc/main/javasrc/main/资源src/测试/javasrc/测试/资源/sample.json

"resource"与"java"并行。在您的例子中,"资源"是一个包。

2)文件名为"样本"。

查找"getInventoryAndPrice.json"

3) new File在路径上不起作用。您需要getresourcesstream()来从jar中提取数据。(如果你想使用路径,你需要使用nio类,而不是File)