Java Eclipse:Gradle源文件夹迁移中断JUnit测试资源
我使用Java 11.0.10重构了一个Eclipse项目,以匹配Gradle的默认源和资源文件夹,而不是Eclipse的源和资源文件夹,如下所示:Java Eclipse:Gradle源文件夹迁移中断JUnit测试资源,java,eclipse,gradle,junit5,buildship,Java,Eclipse,Gradle,Junit5,Buildship,我使用Java 11.0.10重构了一个Eclipse项目,以匹配Gradle的默认源和资源文件夹,而不是Eclipse的源和资源文件夹,如下所示: eclipse Gradle src -> src/main/java resources -> src/main/resources test -> src/test/java testResources -> src/test/resources 我相应地
eclipse Gradle
src -> src/main/java
resources -> src/main/resources
test -> src/test/java
testResources -> src/test/resources
我相应地将源和资源移动到文件夹中
当我访问JUnit测试中的测试资源时,比如TestClass.class.getResource(“/my/package/mytestresource.xml”)
它返回[ProjectFolder]/src/main/resources/my/package/mytestresource.xml
而不是[ProjectFolder]/src/test/resources/my/package/mytestresource.xml
。测试在Eclipse的JUnit启动器上运行
TestClass.java位于[ProjectFolder]/src/test/my/package
中,测试资源位于[ProjectFolder]/src/test/resources/my/package/mytestresource.xml
中
在重构之前,这种方法非常有效
如何告诉Eclipse和JUnit将输出路径合并在一起?或者我可以告诉Eclipse使用2个输出路径吗
以前的build.gradle
包含以下内容(已完全删除):
更改前的.classpath
:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="bin/test" path="test">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/test" path="src">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/test" path="resources">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/test" path="testResources">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin/default"/>
</classpath>
我使用以下软件:
Windows 10 Version 2004
eclipse JDT 2021-03
Buildship 3.1.5
Gradle 6.4.1
JUnit Jupiter 5.7.0
我找到了两种解决此问题的方法:
.classpath
文件中操作classpathentry
:
apply plugin: 'eclipse'
eclipse {
classpath {
file {
whenMerged {
entries.each { source ->
if (source.kind == 'src' && source.path.contains('src/main')) {
source.entryAttributes.put("test", "true")
source.output="bin/test"
}
}
}
}
}
}
源集
sourceSets {
main {
java {
srcDirs = ['src/main/java']
}
resources {
srcDirs = ['src/main/resources']
}
}
test {
java {
srcDirs = ['src/main/java', 'src/test/java']
}
resources {
srcDirs = ['src/main/resources', 'src/test/resources']
}
}
}
我不知道为什么eclipse会出现这种情况,但至少它又起作用了。所以,
mytestresource.xml
同时出现在src/main/resources
和src/test/resources
中?不,不是,它只出现在src/test/resources
apply plugin: 'eclipse'
eclipse {
classpath {
file {
whenMerged {
entries.each { source ->
if (source.kind == 'src' && source.path.contains('src/main')) {
source.entryAttributes.put("test", "true")
source.output="bin/test"
}
}
}
}
}
}
sourceSets {
main {
java {
srcDirs = ['src/main/java']
}
resources {
srcDirs = ['src/main/resources']
}
}
test {
java {
srcDirs = ['src/main/java', 'src/test/java']
}
resources {
srcDirs = ['src/main/resources', 'src/test/resources']
}
}
}