首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让gradle eclipse插件构建包含其他java测试任务依赖项的类路径?

如何让gradle eclipse插件构建包含其他java测试任务依赖项的类路径?
EN

Stack Overflow用户
提问于 2019-09-14 14:08:14
回答 1查看 631关注 0票数 0

我从一个全新的由gradle init任务生成的java-library项目开始。然后,我按照gradle java插件用户指南中给出的步骤添加了一个integrationTest任务:https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests。但是现在gradle eclipse插件在.classpath文件中不包含intTestImplementation依赖项。使用gradle build test任务可以很好地编译、测试和运行一切,但是因为.classpath缺少intTestImplementation依赖项,所以VSCode说我的集成测试类使用了未定义的类型。

我试着调整文档中显示的关于gradle eclipse插件的配置,但我在那里的尝试都没有帮助。https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html

这是我的build.gradle文件

代码语言:javascript
复制
plugins {
    id 'java-library'
    id 'eclipse'
}

repositories {
    jcenter()
}

sourceSets {
    intTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

configurations {
    intTestImplementation.extendsFrom implementation
    intTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
    intTestImplementation 'junit:junit:4.12'
}

task integrationTest(type: Test) {
    description = 'Runs integration tests.'
    group = 'verification'

    testClassesDirs = sourceSets.intTest.output.classesDirs
    classpath = sourceSets.intTest.runtimeClasspath
    shouldRunAfter test
}

并且运行gradlew eclipse会生成如下所示的类路径,缺少junit依赖项

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="output" path="bin/default"/>
    <classpathentry output="bin/main" kind="src" path="src/main/java">
        <attributes>
            <attribute name="gradle_scope" value="main"/>
            <attribute name="gradle_used_by_scope" value="main,test,intTest"/>
        </attributes>
    </classpathentry>
    <classpathentry output="bin/main" kind="src" path="src/main/resources">
        <attributes>
            <attribute name="gradle_scope" value="main"/>
            <attribute name="gradle_used_by_scope" value="main,test,intTest"/>
        </attributes>
    </classpathentry>
    <classpathentry output="bin/test" kind="src" path="src/test/java">
        <attributes>
            <attribute name="gradle_scope" value="test"/>
            <attribute name="gradle_used_by_scope" value="test"/>
        </attributes>
    </classpathentry>
    <classpathentry output="bin/test" kind="src" path="src/test/resources">
        <attributes>
            <attribute name="gradle_scope" value="test"/>
            <attribute name="gradle_used_by_scope" value="test"/>
        </attributes>
    </classpathentry>
    <classpathentry output="bin/intTest" kind="src" path="src/intTest/java">
        <attributes>
            <attribute name="gradle_scope" value="intTest"/>
            <attribute name="gradle_used_by_scope" value="intTest"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-10/"/>
</classpath>

我本以为gradle eclipse任务会生成带有junit依赖项的.classpath文件,但却没有生成。

EN

回答 1

Stack Overflow用户

发布于 2021-07-09 00:31:45

我也曾在集成测试中苦苦挣扎。这是我的解决方案,对我有效。

更改sourceSet:

代码语言:javascript
复制
sourceSets{
    intTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
        java.srcDirs=files('src/intTest/java')
        resources.srcDirs=files('src/intTest/resources')
    }

}

这应该可以修复类路径。

我还面临着另一个问题:我的集成测试运行了.gradlew集成,但是在VS代码中,我得到了一个编译错误,尽管依赖项(仅为集成测试任务设置)添加了,但没有找到库

代码语言:javascript
复制
intTestImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'

当我在VScode中点击"Run test“时,我得到了一个编译异常。这可能是VSCode中的一个错误,因为我也尝试在intelliJ中使用相同的代码,没有错误,集成测试在intellij中运行良好。

为了消除这个错误,我还添加了测试依赖项:

代码语言:javascript
复制
testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57932932

复制
相关文章

相似问题

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