Gradle пользовательская задача JavaCompile для обработки аннотаций - PullRequest
0 голосов
/ 31 марта 2020

Я работаю над плагином Gradle, который регистрирует задачу JavaCompile, которая должна запускать процесс обработки аннотаций.

Вот то, что у меня сейчас

private fun Project.runConfiguration(variants: DomainObjectSet<out BaseVariant>) {
        variants.all { variant ->
            // Assert Shuttle annotation processor is present or throw exception
            val processor = ShuttleProcessor::class.java.canonicalName ?: throw ShuttleCompilerNotFoundException()
            val packageName = variant.getPackageName()
            val task = tasks.register(
                    "generateShuttle${variant.name.capitalize()}Sources",
                    JavaCompile::class.java
            ) {
                it.group = TASK_GROUP
                it.source = variant.getSourceFolders(SourceKind.JAVA).first()
                it.options.annotationProcessorPath = variant.annotationProcessorConfiguration
                it.options.compilerArgs.addAll(listOf(
                        "-proc:only", "-implicit:none",
                        "-processor", processor
                ))
            }

            variant.registerJavaGeneratingTask(task.get())
        }
    }

В android проект, когда я применяю свой плагин и запускаю задачу с Gradle, пока ничего не происходит. Я даже пытался выдать исключение в первую строку моего процессора, но все равно безуспешно.

Я что-то упускаю или что-то делаю не так? Также, как я могу сказать задаче, что он должен использовать ShuttleProcessor в качестве процессора аннотаций.

Я работаю с kotlin, а не с Groovy.

Спасибо.

1 Ответ

0 голосов
/ 04 апреля 2020

Я нашел решение того, что случилось неправильно. JavaCompile задача должна знать, где находится процессор, который мы используем. Таким образом, отсутствующим фрагментом были эти строки

val classPath = variant.getCompileClasspath(null)

, и конфигурация моей задачи должна включать эти изменения

classpath = classPath
options.annotationProcessorPath = classPath
...