无法使用FlatDir来源的gradle插件

时间:2019-02-28 04:48:18

标签: java gradle plugins repository local

注意:与How to amend Gradle plugins {} management repository for custom plugins?不可重复,其中不包括对flatDir的使用。

问题

如何使用新的plugin {}语义而不是已弃用的apply()语义来使用在本地JAR中定义的Gradle插件?

当前状态

发布问题并进行了相当长的搜索I filed an issue之后,没有任何解决办法,想知道Gradle修订版插件是否出于设计或监督的目的,不支持这种本应普遍且直接的使用?语义。

很遗憾,我的报告已关闭,没有提供有用的信息。

我要求澄清,但仍在等待,在19天后写此更新。

我很沮丧,因为期望社区至少对讨论这个问题感兴趣。

如果您可以提供信息,请这样做。

首次更新

在阐明了用于配置插件源的新样式之后,我更新了settings.gradle文件以使用以下块打开。但是,我很遗憾仅凭此更改我看不到任何改善。 (对于build.gradle文件中引用的插件ID字段,我同时尝试了JAR元数据中发布的全局ID和JAR fie的基本名称。两者均同样失败。)

pluginManagement {
    repositories {
        gradlePluginPortal()
        jcenter()
        flatDir {
            dirs 'lib`'
        }
    }
}

文档说明了如何使用自定义存储库,但似乎忽略了平凡的目录的情况。

第二次更新

如果将版本号添加到JAR文件和plugins {}块中的相应语句中,我会有所改进。在这种情况下,消息变为:

Plugin [id: 'plugin-id', version: '1.0.0'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'plugin-id:plugin-id.gradle.plugin:1.0.0')
  Searched in the following repositories:
    Gradle Central Plugin Repository
    BintrayJCenter
    flatDir(/absolute/path/to/lib)

在这种情况下,该目录将添加到搜索到的源列表中。

奇怪的是,后缀.gradle.plugin被附加到了我在印刷品中的ID。奇怪的是,将版本号添加到要搜索的内容中会影响要搜索的地点列表

所以我的项目仍然无法构建。感谢您的进一步帮助。

原始背景

我在项目的lib目录中放置了一个包含自定义插件定义的JAR文件。使用下面的build.gradle构建文件,该构建成功运行。

buildscript {
  repositories {
      flatDir {
          dirs 'lib'
      }
  }
}

apply plugin: 'plugin-id'

但是,apply()语义已被弃用,而偏向于plugins {}块,因此我尝试如下更新构建文件。

plugins {
    id 'plugin-id'
}

repositories {
    flatDir {
        dirs 'lib'
    }
}

我知道plugins {}的内容可以从repositories {}的定义中得出。

但是,更改会导致失败:

* What went wrong:
Plugin [id: 'plugin-id'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (plugin dependency must include a version number for this source)

保留plugin {}块,但将repositories {}块移回到前面的buildscript {}块不能解决该错误。也就是说,即使我恢复到早期版本,仅用apply()块替换了plugin {}语句,该错误仍然存​​在。

最后,将repositories {}块添加到dependencies { classpath: ':jarname' }块中是没有任何效果的,尽管我不知道为什么会这样,但一些消息人士认为这是必要的。

1 个答案:

答案 0 :(得分:0)

这有效。经过gradle 6.3测试。

build.gradle

plugins {
    id 'plugin-id'
}

settings.gradle

pluginManagement {
    buildscript {
        repositories {
            flatDir {
                dirs '/plugin-folder/build/libs'
            }
        }
        dependencies {
            classpath ':plugin-jar:0.0.1'
        }
    }
}

更新:我今天才发现,无需使用上面的dependencies块就可以解决您的插件jar。在这种情况下,您应该将插件jar命名为[plugin-id].gradle.plugin[-version].jar。请注意,[-version]部分是可选的,plugin-id.gradle.plugin.jar也将起作用。

注意:不推荐使用Flat dir存储库,而应使用本地maven repo文件夹。尤其是当您要本地覆盖远程存储库中存在的工件时。参见https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver。考虑到gradle本身不支持在maven repo文件夹中安装本地工件,似乎不可能完全脱离maven而转而使用gradle。