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

标签 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>

最佳答案

问题是,eclipse 不理解测试代码和生产代码之间的区别。正如 Makoto 指出的那样,通常主要代码位于 src/main/java 中,测试代码位于 src/test/java 中。但即使遵循这些约定,eclipse 也会在运行您的应用程序时从 src/test/java 中获取代码。我现在看到两个选项:

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

干净的解决方案是 eclipse 最终开始支持不同类型的源,就像 idea 多年来所做的那样,全世界的 java 用户都要求多年。

干杯, 雷内

关于java - 与常规应用程序的测试类冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27598491/

相关文章:

java - 如何解释spring security中的hasPermission?

java - 在 'mvn install' 之后仍然找不到包

android - Bitbucket - 将项目文件推送到空的 Git 存储库

java - 具有混合构造函数的 Spring Autowiring bean

java - 自定义 XML 的 Eclipse IDE 内容辅助

java - Eclipse 删除了我的 3 个项目

java - EJB 与 Spring + POJO

java - JAVA 中具有优先级的互斥量

java - 显示以 "null"开头的结果

java - Gson 抛出 MalformedJsonException 和其他异常