java - 构建 gradle 插件

标签 java gradle groovy gradle-plugin

我正在与一个项目一起开发一个 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/

相关文章:

gradle - 我没有代理,但 Gradle 说 "Connect to 127.0.0.1:8888 [/127.0.0.1] failed",即使在删除 ~/.gradle 之后

android - Gradle,Gradle包装器在Android Studio中的不同实例by ionic cordova

list - 使用 List-entrys Groovy 进行模式匹配的优雅方式

java - Angular JS , Tomcat Apache , # Urls

java - 动态添加到 horizo​​ntalscrollview

java - 如何将 gradle 项目的子模块安装或发布为 jar

groovy - 如何查找 groovy args 是否包含特定字符串

grails - 闭包返回其引用/指针而不是返回值

java - 使用 proguard 进行 RCP 插件混淆

java - Netbeans 包导入 Intstream