java - 构建 gradle 插件
问题描述
我正在与一个项目一起开发一个 gradle 插件:
plugin_consumer
|
+ build.gradle
+ src/
plugin
|
+ build.gradle
+ libs/
+ src/
所有 jar 都plugin/libs
在构建后移动到,plugin consumer
模块使用插件,如下所示:
buildscript {
repositories {
// ...
}
dependencies {
classpath fileTree(dir:'../plugin/libs', include: ['*.jar'])
}
}
apply plugin: 'my.custom.plugin'
我进行了测试,这个设置运行良好,但是插件.jar
是在没有依赖项的情况下构建的,一旦我向项目添加一些依赖项,消费者 buildscript 就会因为NoClassDefFoundError
异常而开始崩溃。问题是当我构建一个胖罐子而不是脚本不再找到插件时:
// from plugin/build.gradle
// Configurations to build jar with dependencies
configurations {
jar.archiveName = 'plugin.jar'
}
jar {
archiveName = 'plugin.jar'
baseName = project.name + '-all'
from { configurations.compile.collect {
println it
it.isDirectory() ? it : zipTree(it)
} }
}
在项目上运行命令plugin_consumer
会引发错误:
> Failed to apply plugin [id 'my.custom.plugin']
> Plugin with id 'my.custom.plugin' not found.
解决方案
我还没有发现问题,但已经找到了解决方案。不知何故jar
,打包所有源代码的指令弄乱了插件 jar 文件。以下配置已在插件端起作用:
//...
jar {
from {
configurations.compileWithDependencies.collect { it.isDirectory() ? it : zipTree(it) }
}
}
configurations {
compileWithDependencies
}
dependencies {
compile gradleApi()
compileWithDependencies 'my.dependency1'
compileWithDependencies 'my.dependency1'
testCompile 'test.dependency'
configurations.compile.extendsFrom(configurations.compileWithDependencies)
}
从外观上看,我猜gradleApi()
不应该将依赖项编译到插件 jar 中。
推荐阅读
- go - Go 自定义错误处理错误界面报告结果到实际错误?
- python - 使用 Keras 训练字符模型的 InvalidArgumentError
- memory - 发送到 GPU 的变量是否会在超出范围时自动从 GPU 内存中删除?
- compilation - 如何使用 cov-build 工具构建 Juliet 测试套件以通过 GitHub 进行分析
- discord - Message.js 抛出错误“无法读取未定义的属性‘内容’”
- wiremock - WireMock CustomTransformer(车把助手不在 bodyFile 中工作)
- prometheus - Prometheus 中的多个指标查询
- c - 如何使用 Windows API 打印任何文件类型?
- python - 如何将空格键绑定到 Tkinter 上的 2 个函数?
- javascript - 如何将 Active Directory 令牌 curl 命令转换为节点获取