我们使用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>
答案 0 :(得分:2)
问题是,eclipse不了解测试代码和生产代码之间的区别。正如Makoto所指出的那样,主要代码通常放在src/main/java
和src/test/java
中的测试代码中。但即使按照这些惯例,eclipse也会在运行你的app时从src/test/java
获取代码。我现在看到两个选项:
干净的解决方案是,eclipse最终开始支持不同类型的源,因为这些想法多年来一直存在,全世界的Java用户都要求多年。
欢呼声, 勒
答案 1 :(得分:1)
这听起来像是一个杂乱无章的项目结构。
Maven prescribes a standard way隔离您的源代码,这是Gradle所尊重的。一个通常在src/main/java
中有他们的源代码,在src/test/java
中有他们的测试代码,两者都会跟着典型的包层次结构。
我建议您将测试文件移动到该结构中。如果包装仍然正确无误,Gradle将成功运行您的测试。