Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不在类路径中的依赖项的测试资源?_Java_Spring_Maven 2_Junit_Classpath - Fatal编程技术网

Java 不在类路径中的依赖项的测试资源?

Java 不在类路径中的依赖项的测试资源?,java,spring,maven-2,junit,classpath,Java,Spring,Maven 2,Junit,Classpath,我有一个使用Maven设置的多模块Spring项目: my-root (pom) - my-logic - my-webapp (depending on my-logic) - my-consoleapp (depending on my-logic) 我的测试类继承自AbstractTransactionalJUnit4SpringContextTests,并使用@ContextConfiguration设置应用程序上下文 例如,弹簧控制器的测试等级: @RunWi

我有一个使用Maven设置的多模块Spring项目:

my-root (pom)
    - my-logic
    - my-webapp (depending on my-logic)
    - my-consoleapp (depending on my-logic)
我的测试类继承自
AbstractTransactionalJUnit4SpringContextTests
,并使用
@ContextConfiguration
设置
应用程序上下文

例如,弹簧控制器的测试等级:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { 
  "classpath:applicationContext-logic-test.xml",
  "classpath:applicationContext-web-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests {

  @Autowired
    private ApplicationContext applicationContext;
    ...
}
正如您所看到的,每个模块都有一个配置XML。我有单独的测试配置,驻留在每个模块的测试/资源中(另外还有后缀“-test”)。如果我在Eclipse中运行JUnit测试,这一切都会起作用(类编译、运行并且JUnit测试成功)

现在我的问题是:使用Maven运行测试将不起作用(例如,使用
我的根目录上的“runas”>“Maven install”(我使用m2eclipse))。具体来说,它将抛出以下异常:

java.io.FileNotFoundException:无法打开类路径资源[applicationContext logic test.xml],因为它不存在`

Maven似乎没有将
my logic/src/test/resources
中的文件添加到运行
my webapp
的单元测试时设置的类路径中


我怎样才能解决这个问题呢?

这是精心设计的。测试资源没有放置在输出工件中,因此您所依赖的任何测试依赖项都将无法访问,即使在单元测试类路径中也是如此

如果你想完成你想做的事情,你应该创建一个包含测试所需资源的项目,并使它成为我的逻辑和我的webapp的测试范围的依赖项

Maven似乎没有将
my logic/src/test/resources
中的文件添加到运行我的webapp的单元测试时设置的类路径中

不,确实没有。首先,Maven使用始终通过本地存储库解析的二进制依赖项。其次,二进制依赖项不包括测试内容

但你能做的是:

  • 配置
    my logic
    模块,使用
  • mywebapp
    模块配置为依赖于此测试JAR(使用
    test
    范围)
  • 对于#1,您必须在
    my logic
    的pom.xml中配置Maven Jar插件:

    <project>
      <build>
        <plugins>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
           <version>2.2</version>
           <executions>
             <execution>
               <goals>
                 <goal>test-jar</goal>
               </goals>
             </execution>
           </executions>
         </plugin>
        </plugins>
      </build>
    </project>
    

    应该可以了。

    非常感谢您的回答!我使用了这个解决方案,它是有效的。既然您已经解释了这一点,我也很清楚,类路径中不包括所有(外部)依赖项的测试资源。他们应该怎么做?但不知何故,如果包括我自己模块中的资源,那就太好了。尽管我不知道这到底是怎么回事,但现在我想起来了;)@不客气。Maven的思想是模块是自包含的:您可以签出单个模块,而不需要它的兄弟,然后构建它。任何涉及相对路径的东西都会破坏这一点,这是不可取的。
    <project>
      ...
      <dependencies>
        <dependency>
          <groupId>com.myco.app</groupId>
          <artifactId>foo</artifactId>
          <version>1.0-SNAPSHOT</version>
          <type>test-jar</type>
          <scope>test</scope>
        </dependency>
      </dependencies>
      ...
    </project>