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' }块没有效果,一些消息来源认为这是必要的,尽管我不知道为什么会这样。
这有效。使用 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。
| 归档时间: |
|
| 查看次数: |
3036 次 |
| 最近记录: |