【问题标题】:How do I get the gradle eclipse plugin to build a classpath including my additional java test task dependencies如何让 gradle eclipse 插件构建一个类路径,包括我的附加 java 测试任务依赖项
【发布时间】:2020-01-15 21:06:01
【问题描述】:

我从gradle init 任务生成的全新java 库项目开始。然后我按照 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 文件

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 依赖项

<?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 文件,但它丢失了。

【问题讨论】:

标签: java eclipse gradle visual-studio-code gradle-plugin


【解决方案1】:

我也曾在集成测试方面遇到过困难。这是适合我的解决方案。

更改源集:

sourceSets{
    intTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
        java.srcDirs=files('src/intTest/java')
        resources.srcDirs=files('src/intTest/resources')
    }

}

这应该修复类路径

我还遇到了另一个问题:我的集成测试使用 .gradlew 集成运行,但在 VS Code 中,我收到一个编译错误,尽管添加了依赖项(仅为集成测试任务设置)但未找到库

intTestImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'

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

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

testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2023-03-02
    • 2016-06-04
    • 2020-11-17
    • 2011-10-29
    • 2018-02-27
    • 1970-01-01
    • 2013-09-21
    相关资源
    最近更新 更多