与常规应用程序的测试类冲突

时间:2014-12-22 07:41:03

标签: java eclipse spring junit gradle

我们使用Gradle进行依赖关系管理和应用程序的部署。我们的应用程序是一个带有public main()方法的常规Java应用程序。 Eclipse允许直接在上下文菜单上启动应用程序(不使用Gradle)。

然而,Eclipse将测试类添加到类路径中。由于我们对测试类和实际应用程序使用Spring配置注释,因此我们会遇到冲突。例如。数据库连接实例化两次导致启动错误。

有没有办法告诉Eclipse排除要添加到类路径的测试类?

我知道有一个gradle插件'应用程序',它允许编译和启动应用程序。但是,我们需要并行运行多个应用程序,这会导致gradle插件出现锁定问题。

编辑: 我不清楚:问题是实际项目(applications.core)所依赖的项目(libs.core)包含了测试类。实际项目的测试类不包含在Java类路径中。

对于所有项目,我们有以下结构:

Java Classes: src/main/java/
Test Classes: src/test/java

'libs.core'项目文件的.classpath文件包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="output" path=".eclipse-classes"/>
    <classpathentry kind="src" path="src/main/java"/>
    <classpathentry kind="src" path="src/main/resources"/>
    <classpathentry kind="src" path="src/test/java"/>
    <classpathentry kind="src" path="src/test/resources"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/>
    <classpathentry sourcepath="[path to gradle cache]commons-logging-1.1.3-sources.jar" kind="lib" path="[path to gradle cache]commons-logging-1.1.3.jar" exported="true"/>
    [other dependencies]
</classpath>

'applications.core'项目文件的.classpath文件包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="output" path=".eclipse-classes"/>
    <classpathentry kind="src" path="src/main/java"/>
    <classpathentry kind="src" path="src/main/resources"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/>
    <classpathentry kind="src" path="/libs.core" exported="true"/>
    <classpathentry sourcepath="[path to gradle cache]commons-logging-1.1.3-sources.jar" kind="lib" path="[path to gradle cache]commons-logging-1.1.3.jar" exported="true"/>
    [other dependencies]
</classpath>

2 个答案:

答案 0 :(得分:2)

问题是,eclipse不了解测试代码和生产代码之间的区别。正如Makoto所指出的那样,主要代码通常放在src/main/javasrc/test/java中的测试代码中。但即使按照这些惯例,eclipse也会在运行你的app时从src/test/java获取代码。我现在看到两个选项:

  • 在运行配置中手动排除src / test文件夹
  • 将您的测试移至单独的测试项目

干净的解决方案是,eclipse最终开始支持不同类型的源,因为这些想法多年来一直存在,全世界的Java用户都要求多年。

欢呼声, 勒

答案 1 :(得分:1)

这听起来像是一个杂乱无章的项目结构。

Maven prescribes a standard way隔离您的源代码,这是Gradle所尊重的。一个通常在src/main/java中有他们的源代码,在src/test/java中有他们的测试代码,两者都会跟着典型的包层次结构。

我建议您将测试文件移动到该结构中。如果包装仍然正确无误,Gradle将成功运行您的测试。