用Gradle创build一个Groovy可执行JAR
这是我的gradle构build脚本。
apply plugin: 'groovy' project.group = "test.tree" archivesBaseName = "tree" project.version = "1.0" manifest.mainAttributes("Main-Class" : "test.tree.App") sourceCompatibility=1.6 targetCompatibility=1.6 repositories { mavenCentral() } dependencies { groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.6' testCompile group: 'junit', name: 'junit', version: '4.8.2' }
这个编译就好了
问题是我不能运行创build的JAR,我得到一个exceptionjava.lang.NoClassDefFoundError: groovy/lang/GroovyObject
所以我猜groovy插件不包括JAR里面的所有必需的类。
如何创build一个独立的JAR,我可以简单地运行;-)
你正在寻找的是应用程序插件 ,它允许你构build一个独立的JVM应用程序,包括所有的依赖和运行脚本。
apply plugin:'application' mainClassName = 'test.tree.App'
编辑:
这应该创build你想要的uberjar:
task uberjar(type: Jar) { from files(sourceSets.main.output.classesDir) from configurations.runtime.asFileTree.files.collect { zipTree(it) } manifest { attributes 'Main-Class': 'test.tree.App' } }
下面的代码也可以 ,使用spring启动插件
buildscript { ext { springBootVersion = '1.2.6.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'groovy' apply plugin: 'eclipse' apply plugin: 'spring-boot' sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { mavenCentral() } sourceSets { main { groovy { srcDirs = ['src'] } } /*test { groovy { srcDirs = ['test/groovy'] } }*/ } dependencies { compile "com.alibaba:fastjson:1.1.34" compile 'org.codehaus.groovy:groovy-all:2.4.5' //testCompile group: 'junit', name: 'junit', version: '4.8.2' } springBoot { backupSource = false mainClass = "com.zhb.hello.Hello" } jar{ baseName = 'hellogroovy' version = '1.1.0' }
我会投票投票阴影gradle插件 。 这是能够build设uberjar子,是相当多才多艺的,有能力像类迁移,以防止依赖地狱 。
我不会去比较这两个插件,但我会尽量说,因为增加的function,我已经习惯使用过去的应用程序的影子。
当我厌倦了基于@Grab的groovy脚本的启动时间时,我倾向于使用shadow插件编写gradle构build文件,即使是单个文件groovy脚本。 一个示例gradle构build文件,能够在当前目录中构build一个groovy脚本文件的超级jar。 主类名称需要对应于脚本文件名称:
repositories { jcenter() mavenCentral() } defaultTasks = ['shadowJar'] version = "1.0" dependencies { compile "org.codehaus.groovy:groovy:2.4.7", "commons-cli:commons-cli:1.2" } sourceSets { main { groovy { srcDirs = [rootDir] } } } project.tasks.remove jar shadowJar { manifest { attributes 'Main-Class': 'MyGroovyScriptName' } classifier = "" }
uber jar将会在build/libs
目录下生成。
- Gradle替代mvn安装
- 谷歌应用引擎的gradleunit testing在哪里期待persistence.xml?
- 从Gradle构build脚本中提取常用方法
- 如何在Android Studio和Gradle中设置源1.7
- 在Android上使用不同的密钥进行Gradle签名
- Gradle Sync失败找不到约束布局:1.0.0-alpha2
- .dex文件中方法引用的数量不能超过64k API 17
- 错误:执行任务':app:packageRelease'失败。 >无法计算/../AndroidStudioProjects/../classes.jar的散列
- 在android中包含.so库Android工作室