Gradle 复合构建:来自 Ant Taskdef 类路径中包含的构建的 jar



Project foo定义了根项目中使用的一些ant任务。对于复合构建:

设置.gradle

includeBuild '../foo'

build.gradle

configurations {
foo
}
dependencies {
foo fileTree(dir : '../foo/build/libs', include: ['*.jar'])
}
ant.taskdef(name: 'foo',
classname: 'mypackage.Foo',
classpath: configurations.foo.asPath)

在评估根项目之前,应构建包含的项目 foo 的 jar,以便该 jar 在 ant taskdef 类路径中可用。如何?

但是任务依赖关系处于执行阶段,例如

task run {
dependsOn gradle.includedBuild('../foo').task(':jar')
}

jar 只有在执行任务后才可用,为时已晚。

您可以在执行阶段配置 ant taskdef,此时已构建包含的项目。

例如
task run {
dependsOn gradle.includedBuild('../foo').task(':jar')
doFirst {
ant.taskdef(name: 'foo',
classname: 'mypackage.Foo',
classpath: configurations.foo.asPath)
// call your ant target as usual
}
}

即使有一种方法可以在复合子项目上配置评估时间依赖关系,项目评估的性能也会大幅下降。即使是像tasksprojects这样的简单任务也需要完整的 ant 任务构建 - 绝对不是你想要的

最新更新