以编程方式生成插件依赖项列表,而不使用gradleApi和localGroovy

时间:2014-10-03 14:24:00

标签: groovy gradle classpath

背景

我想使用my pluginnebula-test进行回归测试。我的插件是用Groovy编写的,但它很简单,使用Gradle 1.x构建时可以在Gradle 2.x的项目中使用。目前,由于Gradle和Groovy conflicts on classpath,我只能使用Gradle 1.x自动测试它(从Gradle 2.x运行时,有Gradle 1.x和2.x以及Groovy 1.8.6和2.3 .6依赖)。作为一种解决方法,我想在类路径上只设置我的插件的运行时依赖项(不包括gradleApilocalGroovy提供的JAR),我需要在为我的插件运行Gradle构建脚本时生成该列表(当测试运行时,确定包含给定JAR的内容为时已晚。

问题

我如何以编程方式(例如build.gradle中的任务)生成运行时依赖项列表(事实上JAR由它们+ build / class / main和build / resources / main添加到类路径中)没有来自gradleApilocalGroovy

的那些

2 个答案:

答案 0 :(得分:1)

听起来你想要这样的东西:

configurations {
    gradleDeps
}

dependencies {
    gradleDeps gradleApi() // includes localGroovy
    compile configurations.gradleDeps
    compile ...
    runtime ...
}

def runtimeWithoutGradleDeps = configurations.runtime - configurations.gradleDeps

task printFiles {
    doLast {
        runtimeWithoutGradleDeps.each { println it }
    }
}

答案 1 :(得分:1)

这是一个不需要添加其他配置的解决方案:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.apache.ant:ant-javamail:1.9.0'
    compile 'javax.mail:mail:1.4'
    compile 'javax.activation:activation:1.1.1'
    compile gradleApi()
    compile localGroovy()
}

task deps << {
    def home = project.gradle.startParameter.gradleHomeDir
    project.configurations.runtime.files.findAll { f ->
        !f.absolutePath.startsWith(home.absolutePath)
    }.each {
        println it
    }
}