在使用我的 Gradle 插件的 Gradle 项目上添加第二个源文件夹

Add a 2nd source folder on a Gradle project which uses my Gradle plugin

我创建了一个 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 文件夹。

我尝试了两种方法来解决它:

  1. 将 sourceSets 块添加到 build.gradle 中,例如:

sourceSets { main { java { srcDirs = ['src/main/java', 'target/java'] } } }

当我尝试 gradle build 时,:compileDebugJavaWithJavac 任务失败,因为 src/main/java 文件夹中的某些代码需要我生成的代码。但是target文件夹里的代码貌似编译不了

  1. 通过插件代码添加源文件夹

这是我的插件 class(在 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 相同的问题。

我真的不知道为什么这不起作用,有人知道吗?

+=代替=就行了:

compileJavaTask.source += project.files("${project.rootDir}/target/java", output)