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

时间:2015-01-30 20:19:52

标签: gradle checkstyle

我有以下项目结构:

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,但它也不起作用。

3 个答案:

答案 0 :(得分:13)

您的代码段中的

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')
}

答案 1 :(得分:2)

请你试试替换:

configFile = 'checkstyle/checkstyle.xml' as File

使用:

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

并尝试它是否有效?

如上所述,here configFile已替换为config。不能尝试但可能:

config = 'checkstyle/checkstyle.xml' as File

会起作用吗?

答案 2 :(得分:1)

有一种更简单的方法可以做到这一点。试试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