使用文件系统中的 Sonarqube 本地插件时 Gradle 构建错误

问题描述

我正在尝试在我的 gradle build 中使用 sonarqube 扫描仪插件。由于证书问题,它既不能从互联网下载,也不能从其他插件通常放置在我们环境中的 Nexus 存储库下载。

  • Gradle 版本:4.1.10
  • 声纳插件 - 3.1

build.gradle

buildscript {
    dependencies {
      classpath files ("../../thirdparty/sonarqube-gradle-plugin-3.1")
                 }
             }

apply plugin: "org.sonarqube"

在执行构建时,我收到错误

行:12 * 出了什么问题:\n 评估根项目“自定义扩展”时出现问题。\n> 未找到 ID 为“org.sonarqube”的插件

我做得对吗?如何解决

解决方法

根据插件 documentationflat directory resolver 的描述,我会这样做:

buildscript {
  repositories {
    flatDir {
      dirs "../../thirdparty/sonarqube-gradle-plugin-3.1"
    }
  }
  dependencies {
    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.1"
  }
}

apply plugin: "org.sonarqube"

编辑:

sonarqube-gradle-plugin 依赖于 sonar-scanner-api,两者都需要加载。使用 flatDir 解析器时,不会咨询 POM,并且无法自动发现此依赖项。在这种情况下,您还需要明确依赖 sonar-scanner-api

buildscript {
  repositories {
    flatDir {
      dirs "thirdparty/sonarqube-gradle-plugin-3.1"
    }
  }
  dependencies {
    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.1"
    classpath "org.sonarsource.scanner.api:sonar-scanner-api:2.16.0.226"
  }
}

您的第 3 方目录需要包含两个 jar;不需要 POM,因为无论如何都不会咨询它们:

$ find thirdparty/ -type f
thirdparty/sonarqube-gradle-plugin-3.1/sonar-scanner-api-2.16.0.226.jar
thirdparty/sonarqube-gradle-plugin-3.1/sonarqube-gradle-plugin-3.1.jar

作为替代方法,您可以在本地重新创建 Maven 层次结构,以便自动解析依赖项。这包括更多的目录和文件,但从长远来看可以更容易维护(如果出现任何新的依赖项,则无需更改 build.gradle 即可更新目录内容):

buildscript {
  repositories {
    maven {
      url "file://${projectDir}/thirdparty"
    }
  }
  dependencies {
    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.1"
  }
}

apply plugin: "org.sonarqube"

这需要重新创建所有必需的文件和目录:

$ find thirdparty/ -type f
thirdparty/org/sonarsource/parent/parent/55/parent-55.pom
thirdparty/org/sonarsource/scanner/api/sonar-scanner-api/2.16.0.226/sonar-scanner-api-2.16.0.226.jar
thirdparty/org/sonarsource/scanner/api/sonar-scanner-api/2.16.0.226/sonar-scanner-api-2.16.0.226.pom
thirdparty/org/sonarsource/scanner/api/sonar-scanner-api-parent/2.16.0.226/sonar-scanner-api-parent-2.16.0.226.pom
thirdparty/org/sonarsource/scanner/gradle/sonarqube-gradle-plugin/3.1/sonarqube-gradle-plugin-3.1.jar
thirdparty/org/sonarsource/scanner/gradle/sonarqube-gradle-plugin/3.1/sonarqube-gradle-plugin-3.1.pom