Добавьте вторую исходную папку в проект Gradle, который использует мой плагин Gradle.

Я создал плагин 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 нуждается в коде, который я генерирую. Но код в целевой папке, похоже, не скомпилирован.

  1. Добавьте исходную папку через код плагина

Вот мой класс плагина (в 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.

Я на самом деле понятия не имею, почему это не работает, у кого-нибудь есть идеи?


person Maxime Opsommer    schedule 24.06.2016    source источник
comment
Я не смог проверить ответы на этих выходных, это по работе, но я буду следить за вашими ответами.   -  person Maxime Opsommer    schedule 24.06.2016


Ответы (1)


+= вместо = в строке:

compileJavaTask.source += project.files("${project.rootDir}/target/java", output)
person Maxime Opsommer    schedule 27.06.2016