当前位置: 首页 > 知识库问答 >
问题:

如何让gradle eclipse插件构建一个包含额外java测试任务依赖项的类路径

李森
2023-03-14

我从一个全新的java库项目开始,该项目由gradleinit任务生成。然后,我按照gradle java插件用户指南中给出的步骤添加了一个integrationTest任务:https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests.但是现在gradle eclipse插件在中不包含intTestImplementation依赖项。类路径文件。使用gradlebuildtest任务,一切都可以很好地编译、测试和运行,但这是因为。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
}

运行gradleweclipse会生成这样一个类路径,它缺少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文件,但它丢失了。

共有1个答案

纪畅
2023-03-14

我也在努力进行集成测试。这是我的解决方案,对我有效。

更改源设置:

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'
 类似资料:
  • 我想在gradle中创建zip/war/jar工件,其中包括几个类,并且只需要依赖项 我有简单的zip任务如下: 现在我想包括一些编译依赖项示例构建。渐变骨架: 对于我的zip任务:

  • 我将给你一个关于我的文件的概述: 设置。分级: Build.Gradle: 注意:我以为没有将依赖项添加到类路径中,但我不确定这一点。但是,我希望Intellij将依赖项添加到类路径中(或者在清单文件中声明) 但是,这会创建一个zip/tar,其中包含一个执行脚本和一个bin文件夹,这不是我的本意。 所以我开始在谷歌上搜索了好几个小时,但我找不到解决问题的方法。

  • 我想创建一个自动应用其他插件(外部插件)的插件。这需要在调用“apply plugin”之前设置插件的buildscript依赖项。然而,我似乎无法在插件中添加buildscript依赖项,或者我得到:您无法更改未处于未解析状态的配置! 有解决办法吗? 我的示例(非工作)代码:

  • 我以为这会起作用,但事情一定发生了变化(或者我犯了某种错误) 根据父项目的任务,gradle子项目任务的语法是什么? 我在根级别上有以下任务(即子项目闭包之外和所有项目闭包之外)。 我得到的错误是 然后我猜了几件事包括这个 但那给了我错误 版本信息因此

  • 我的项目中有以下设置... 用于SOA风格项目的多项目gradle构建,使用Rabbitmq和Spring集成连接在一起。 包含许多grails项目以及表示服务的普通java/groovy项目。 每个服务项目旁边都有一个项目(jar),其中包含可以使用Spring集成代理的服务的所有公共接口(和消息)。 这些项目使用gradle依赖关系相互关联,然后我使用gradle想法插件生成IntelliJ项