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

时间:2017-07-21 23:07:38

标签: 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

插件的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"
}

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

pluginManagement {
    repositories {
        maven {
            url "https://artifactory/java-v"
        }
    }
}

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。

有没有人知道我是在查看错误的位置,还是为什么用.gradle.plugin为id后缀。不应该看一下像这样的GAV的位置:com.gradle.plugin-publish:com.gradle.plugin-publish:0.9.7?

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

提前致谢

修改 感谢Mateusz Chrzaszcz,我能够取得进步。

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

除了他的解决方案,你必须解决插件。我能够破解我的方式来实际解决相应的名称。

为了做到这一点,必须做如下:

  1. 在webbrowser中去插件:id“com.github.hierynomus.license”version“0.11.0”转到以下网址:https://plugins.gradle.org/api/gradle/4.0.1/plugin/use/com.github.hierynomus.license/0.11.0
  2. 返回的json包含useModule调用中所需的GAV。使用那个
  3. 以下是一个例子:

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

1 个答案:

答案 0 :(得分:0)

尝试实施插件分辨率规则。

根据gradle文档:

  

插件解析规则允许您修改插件{}块中的插件请求,例如更改请求的版本或显式指定实现工件坐标。   要添加解决方案规则,请使用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'
  }
 }
}

请记住,这是一个孵化功能。