我们使用 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/