首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse: Gradle源文件夹迁移破坏了JUnit测试资源

Eclipse: Gradle源文件夹迁移破坏了JUnit测试资源
EN

Stack Overflow用户
提问于 2021-04-30 12:17:55
回答 1查看 246关注 0票数 0

我使用Java 11.0.10来匹配Gradle的默认源和资源文件夹,而不是Eclipse的源文件夹和资源文件夹,从而重构了eclipse项目,如下所示:

代码语言:javascript
复制
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使用两个输出路径?

在此之前,build.gradle包含以下内容(已完全删除):

代码语言:javascript
复制
sourceSets {
    main {
        java {
            srcDirs  = ['src']
        }
        resources {
            srcDirs  = ['resources']
        }
    }
    test {
        java {
            srcDirs  = ['src', 'test']
        }
        resources {
            srcDirs  = ['resources', 'testResources']
        }
    }
}

更改前的.classpath

代码语言:javascript
复制
<?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>

更改后的.classpath

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="bin/main" path="src/main/java">
        <attributes>
            <attribute name="gradle_scope" value="main"/>
            <attribute name="gradle_used_by_scope" value="main,test"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="bin/main" path="src/main/resources">
        <attributes>
            <attribute name="gradle_scope" value="main"/>
            <attribute name="gradle_used_by_scope" value="main,test"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="bin/test" path="src/test/java">
        <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/test/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="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>

我使用以下软件:

代码语言:javascript
复制
Windows 10 Version 2004
eclipse JDT 2021-03
Buildship 3.1.5
Gradle 6.4.1
JUnit Jupiter 5.7.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-17 15:04:57

我找到了两个解决这个问题的方法:

  1. 将gradle eclipse插件添加到项目中,并在项目的.classpath文件中操作classpathentry

应用插件:' eclipse‘eclipse{ classpath { file { whenMerged { entries.each { -> if (source.kind == 'src’& source.path.contains('src/main')) {source.entryAttributes.put(“测试”),( "true") source.output="bin/test“}

或者另一种

具有gradle的默认源和资源文件夹的Gradle构建中的

  1. Re-introducing。

sourceSets { srcDirs =‘src/ srcDirs / java’}资源{ srcDirs = 'src/ main / resources‘}}测试{ java { srcDirs = 'src/main/java','src/ test /java’}资源{srcDirs=‘src/主/资源’,/test/resources‘}}

我不知道为什么eclipse会发生这种情况,但至少它又起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67333795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档