使用来自 flatDir 源的 gradle 插件

epl*_*epl 6 java plugins local repository gradle

如何为自定义插件修改 Gradle 插件{} 管理存储库? 在这篇文章中没有重复,因为它不包括使用flatDir.


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

当前状态

没有任何解决方案,在发布问题并进行了相当长的搜索之后,我提出了一个问题,想知道这种应该是常见和直接的用法是否在 Gradle 修订后的插件语义中不受设计或疏忽的支持。

不幸的是,我的报告已关闭,没有提供任何有用的信息。

我在一个新问题中要求澄清,但仍在等待。

我很沮丧,原以为社区至少会对讨论这个问题感兴趣。

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

第一次更新

在澄清配置插件源的新样式之后,我更新了我的settings.gradle文件以使用以下块打开。然而,我感到遗憾的是,仅凭这一变化我没有看到任何改善。(对于build.gradle文件中引用的插件 id 字段,我尝试了 JAR 元数据中发布的全局 ID 和 JAR 文件的基本名称。两者都同样失败。)

pluginManagement {
    repositories {
        gradlePluginPortal()
        jcenter()
        flatDir {
            dirs 'lib`'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该文档解释了如何使用自定义存储库,但似乎忽略了一个简单的平面目录的情况。

第二次更新

如果我向 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)
Run Code Online (Sandbox Code Playgroud)

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

奇怪的.gradle.plugin是,在打印的工件中,后缀被附加到我的 ID 上。同样奇怪的是,将版本号添加到正在搜索的内容会影响正在搜索的位置列表

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

原始背景

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

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

apply plugin: 'plugin-id'
Run Code Online (Sandbox Code Playgroud)

但是,apply()不推荐使用语义,支持plugins {}块,所以我尝试更新构建文件,如下所示。

plugins {
    id 'plugin-id'
}

repositories {
    flatDir {
        dirs 'lib'
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道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)
Run Code Online (Sandbox Code Playgroud)

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

最后,向repositories {}块添加一个dependencies { classpath: ':jarname' }块没有效果,一些消息来源认为这是必要的,尽管我不知道为什么会这样。

Ale*_*lex 6

这有效。使用 gradle 6.3 进行测试。

构建.gradle

plugins {
    id 'plugin-id'
}
Run Code Online (Sandbox Code Playgroud)

设置.gradle

pluginManagement {
    buildscript {
        repositories {
            flatDir {
                dirs '/plugin-folder/build/libs'
            }
        }
        dependencies {
            classpath ':plugin-jar:0.0.1'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

注意:不鼓励使用 Flat dir 存储库,而应使用本地 Maven 存储库文件夹。特别是当您想要在本地覆盖远程存储库上存在的工件时。请参阅https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver。考虑到 gradle 本身不支持在 Maven repo 文件夹中安装本地工件,似乎不可能完全放弃 Maven 而转而使用 gradle。