我正在与一个项目一起开发一个 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
正在构建没有依赖项,一旦我向项目添加一些依赖项,消费者构建脚本就开始崩溃,因为 NoClassDefFoundError
异常(exception)。问题是当我构建 脂肪 jar 相反,脚本不再找到插件:// 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 中。
关于java - 构建 gradle 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50543854/