我创建了一个Gradle插件,它可以生成我们想要的一些Java代码。
我在测试项目上测试了我的插件,它运行正常,文件生成正确。
现在我必须在我工作的项目上应用我的插件,为此,我将以下行添加到项目的build.gradle
中:
buildscript {
repositories {
[...]
mavenLocal() <--
}
dependencies {
[...]
classpath 'my.plugin.path:app:1.0' <-- the maven local path of my plugin
}
}
apply plugin: 'myPlugin' <--
然后,我的插件生成的文件被放入src
文件夹。在这种情况下,项目正确构建。
但是,我想将生成的文件放入target
文件夹。
我尝试了两种解决方法:
build.gradle
中,如: sourceSets {
main {
java {
srcDirs = ['src/main/java', 'target/java']
}
}
}
当我尝试gradle build
时,:compileDebugJavaWithJavac
任务失败,因为src/main/java
文件夹中的某些代码需要我生成的代码。但是目标文件夹中的代码似乎没有被编译。
这是我的插件类(在Groovy中):
import com.android.build.gradle.AppPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
def hasAppPlugin = project.plugins.hasPlugin AppPlugin
project.afterEvaluate({
def variants = hasAppPlugin ? project.android.applicationVariants : project.android.libraryVariants
variants.all { variant ->
def compileJavaTask = variant.javaCompile
[...] // Adds tasks to the plugins
compileJavaTask.source = project.files("${project.rootDir}/target/java", output)
compileJavaTask.dependsOn javaTask
}
})
}
}
最后两行应该足够了,但我遇到的问题与案例1相同。
我实际上不知道为什么这不起作用,有人有任何想法吗?
答案 0 :(得分:0)
+=
而不是=
:
compileJavaTask.source += project.files("${project.rootDir}/target/java", output)