无法使用 Gradle 中的新插件机制解析插件

M. *_*aka 6 gradle gradle-plugin

在尝试将我们正在使用的插件上的一些脚本升级到 Gradle 4.0.1 时失败了,我想先修复该插件。该插件是第三方开源项目。

所以我克隆了这个项目并尝试编译它。但是它失败并显示以下消息:

c:\source\gradle-xld-plugin>gradlew build

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\source\gradle-xld-plugin\build.gradle' line: 2

* What went wrong:
Plugin [id: 'com.gradle.plugin-publish', version: '0.9.7'] was not found in 
any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- maven(https://artifactory/java-v) (Could not resolve plugin artifact 'com.gradle.plugin-publish:com.gradle.plugin-publish.gradle.plugin:0.9.7')

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --
debug option to get more log output.

BUILD FAILED in 0s
Run Code Online (Sandbox Code Playgroud)

插件的 build.gradle 脚本如下所示:

plugins {
  id "com.gradle.plugin-publish" version "0.9.7"
  id "com.github.hierynomus.license" version "0.11.0"
  id 'nebula.nebula-release' version '4.0.1'
  id "com.jfrog.bintray" version "1.7.3"
}
Run Code Online (Sandbox Code Playgroud)

除此之外,公司政策规定我们必须通过内部工件服务器,因此已将以下内容添加到 settings.gradle 文件中:

pluginManagement {
    repositories {
        maven {
            url "https://artifactory/java-v"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

jar 文件位于以下位置:https://artifactory/java-v/com/gradle/publish/plugin-publish-plugin/0.9.7/plugin-publish-plugin-0.9.7.jar

但是当我查看错误消息时,我有点困惑,它说它找不到 com.gradle.plugin-publish:com.gradle.plugin-publish.gradle.plugin:0.9.7。它似乎用 .gradle.plugin 为 id 添加了后缀。

有谁知道我是否在看错误的位置,或者它是如何在 id 后缀 .gradle.plugin 的。难道它不应该查看具有这样 GAV 的位置:com.gradle.plugin-publish:com.gradle.plugin-publish:0.9.7?

有谁知道 Gradle 中新插件机制的解析机制是如何工作的。

提前致谢

编辑 感谢 Mateusz Chrzaszcz,我得以进步。

我对解决方案的唯一警告是它似乎是一种解决方法而不是解决方案。但它有效!

除了他的解决方案之外,您还必须解决插件问题。我能够破解我的方式来实际解析适当的名称。

为此,您必须执行以下操作:

  1. 在网络浏览器中查找插件:id "com.github.hierynomus.license" version "0.11.0" 转到以下 URL:https ://plugins.gradle.org/api/gradle/4.0.1/plugin/use /com.github.hierynomus.license/0.11.0
  2. 返回的 json 包含 useModule 调用中所需的 GAV。使用那个

下面是一个例子:

resolutionStrategy {
    eachPlugin {
        if (requested.id.namespace == 'com.gradle' && requested.id.name == 'plugin-publish') {
            useModule('com.gradle.publish:plugin-publish-plugin:0.9.7')
        } else if(requested.id.namespace == 'com.github.hierynomus' && requested.id.name == 'license') {
            useModule('nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0')
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*zcz 3

尝试实施插件解析规则。

根据 gradle 文档:

插件解析规则允许您修改在plugins {} 块中发出的插件请求,例如更改请求的版本或显式指定实现工件坐标。要添加解析规则,请使用pluginManagement {}块内的resolutionStrategy {}

像那样:

pluginManagement {
 resolutionStrategy {
  eachPlugin {
      if (requested.id.namespace == 'com.gradle.plugin-publish') {
          useModule('com.gradle.plugin-publish:0.9.7') //try a few combinations
      }
  }
}
repositories {
  maven {
    url 'https://artifactory/java-v'
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

但请记住,这是一个正在孵化的功能。