Применить плагин Gradle (errorprone) из пользовательского плагина Gradle Java - PullRequest
1 голос
/ 22 января 2020

Мне нужно применить плагин Gradle, в этом случае errorprone от пользовательского плагина Gradle.

Мой плагин имеет build.gradle, который выглядит следующим образом:

gradlePlugin {
    plugins {
        myErrorprone {
            id = 'my-errorprone'
            implementationClass = 'com.my.MyErrorpronePlugin'
        }
    }
}

И Код плагина:

public class MyErrorpronePlugin implements Plugin<Project> {
  List<String> compilerArgs =
      Arrays.asList(
          "-XepExcludedPaths:.*/proto/.*|.*/protoGeneratedSrc/.*",
          "-XepDisableWarningsInGeneratedCode");

  @Override
  public void apply(Project project) {
    project.getPluginManager().apply("net.ltgt.errorprone:");
    for (JavaCompile task : project.getTasks().withType(JavaCompile.class)) {
      task.getOptions().setCompilerArgs(compilerArgs);
    }
  }
}

Затем, когда в другом проекте я применяю этот плагин (после получения зависимостей в buildscript) следующим образом:

apply plugin: 'my-errorprone'

Возникла проблема root project 'my-project.

Не удалось применить плагин [id' my-errorprone '] Плагин с идентификатором' net .ltgt.errorprone 'не найден.

И это разрешается только в том случае, если я добавлю в buildscript classpath

classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.16"

Как я могу заставить свой плагин работать так, чтобы проекту, который потребляет мой плагин, не пришлось добавлять это прямая зависимость в пути к классам в "net .ltgt.gradle: gradle-errorprone-plugin: 0.0.16"?

1 Ответ

0 голосов
/ 25 января 2020

Чтобы решить эту проблему, следует применять плагин по классу, а не по идентификатору. Это заставит вас включить подверженную ошибкам зависимость в список зависимостей вашего плагина, поскольку он не будет компилироваться, пока вы не добавите зависимость.

import net.ltgt.gradle.errorprone.ErrorPronePlugin.class;

public class MyPlugin implements Plugin<Project> {
   public void apply(Project project) {
       project.getPluginManager().apply(ErrorPronePlugin.class);
       // custom logic here 
   } 
} 

и в файл build.gradle:

repositories {
   maven {
      url "https://plugins.gradle.org/m2/"
   }
} 
dependencies {
   api "net.ltgt.gradle:gradle-errorprone-plugin:1.1.1"
} 

Я нашел ответ на форуме Gradle под этим топи c: https://discuss.gradle.org/t/apply-a-gradle-plugin-errorprone-from-a-custom-gradle-java-plugin/34645/4

...