如何在 gradle 2.2+ 的根项目中指定 checkstyle 配置的相对路径

How to specify relative path to checkstyle config in root project in gradle 2.2+

我有以下项目结构:

project
  checkstyle
    checkstyle.xml
  subproject1
    ...
  subproject2
    ...
  build.gradle

我在build.gradle中checkstyle的配置如下:

allprojects {
  apply plugin: 'checkstyle'
  checkstyle {
    configFile = 'checkstyle/checkstyle.xml' as File
  }
}

当我使用 gradle 2.1 时,构建工作正常。升级到 2.2 或 2.2.1 后出现错误:

:subproject1:checkstyleMain FAILED
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':subproject1:checkstyleMain'.
> Unable to create a Checker: unable to find /home/my/project/subproject1/checkstyle/checkstyle.xml

Gradle 现在正在子项目目录中寻找 'checkstyle/checkstyle.xml',这不是我所期望的。

我发现 they mentioned this change in 2.2 release notes。但他们没有说明如何保持解决该路径的旧行为。如何做到这一点?

我尝试使用 project.file 但它也不起作用。

能否请您尝试更换:

configFile = 'checkstyle/checkstyle.xml' as File

与:

configFile = ('checkstyle/checkstyle.xml' as File).absolutePath as File

试试是否有效?

如前所述here configFile is replaced with config。不能尝试,但也许:

config = 'checkstyle/checkstyle.xml' as File

有用吗?

在您的代码段中

allprojects {
  apply plugin: 'checkstyle'
  checkstyle {
    configFile = 'checkstyle/checkstyle.xml' as File
  }
}

您将每个项目的配置文件配置为相对于您当前正在配置的子项目。你可以通过更换

来解决这个问题
checkstyle {
    configFile = 'checkstyle/checkstyle.xml' as File
}

来自

checkstyle {
    configFile = rootProject.file('checkstyle/checkstyle.xml')
}

有一种更简单的方法可以做到这一点。试试 gradle-estilo-plugin。它将负责创建所有配置文件(checkstyle.xml、import-control.xml、suppressions.xml 和 header.txt)。您所要做的就是在 gradle 构建文件中使用该插件。如果您需要任何自定义规则,可以将它们直接添加到您的 gradle 任务中。

这是您开始需要的内容:

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'net.anshulverma.gradle:gradle-estilo-plugin:0.4.8'
  }
}

apply plugin: 'net.anshulverma.gradle.estilo'

estilo {
  source 'sun'
}

在此之后,您可以修改检查、添加抑制、编辑导入控制并直接从 estilo { } 块添加头文件。有关如何执行此操作的详细信息以及包括提示在内的详细信息,请参阅 README