注意:与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' }
块中是没有任何效果的,尽管我不知道为什么会这样,但一些消息人士认为这是必要的。
答案 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。