繁体   English   中英

从自定义 Gradle Java 插件应用 gradle 插件(容易出错)

[英]Apply a gradle plugin (errorprone) from a custom Gradle Java plugin

我需要应用一个 gradle 插件,在这种情况下,自定义 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);
    }
  }
}

然后,当我在另一个项目中应用这个插件时(在构建脚本中获取依赖项之后),如下所示:

apply plugin: 'my-errorprone'

评估根项目“my-project”时出现问题。

未能应用插件 [id 'my-errorprone'] 未找到 ID 为“net.ltgt.errorprone”的插件。

它只有在我添加到 buildscript 类路径时才能解决

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

我怎样才能让我的插件以这样的方式工作,即使用我的插件的项目不必在 "net.ltgt.gradle:gradle-errorprone-plugin:0.0.16" 的类路径中添加这个直接依赖项?

为了解决这个问题,应该通过类而不是ID来应用插件。 这将迫使您在插件的依赖项列表中包含容易出错的依赖项,因为在您添加依赖项之前它不会编译。

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 论坛中找到了答案: https : //discuss.gradle.org/t/apply-a-gradle-plugin-errorprone-from-a-custom-gradle-java-plugin/34645/4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM