使用此build.gradle文件:
plugins {
id 'groovy'
id 'com.github.johnrengelman.shadow' version '1.2.2'
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.4'
}
version = '0.1'
shadowJar {
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'com.mycompany.tools.EncodeFile'
}
}
当我运行~/TOOLS/gradle-2.10/bin/gradle shadowJar
时,我得到一个基本为空的.jar文件(264字节)。
我希望它包含groovy.jar和我的.class文件。
在网上查看样本时有些困惑,因为看起来插件{id ...}是新的首选语法,但样本较旧且不使用该语法。
目录结构是:
./src/groovy/com/mycompany/tools/EncodeFile.groovy
./build.gradle
我猜我要么移动我的.groovy文件,要么我需要修改build.gradle指向groovy文件。
我该如何解决这个问题,以便我得到一个像这样执行的.jar文件:java -jar build/libs/EncodeFile.jar
?
有关使用gradle构建自包含.jar文件的任何其他提示,我们表示赞赏。 Groovy和Java(以及混合)。
我可能会添加第三方.jar文件,我想将其嵌入可执行jar中。任何提示都将受到赞赏。
答案 0 :(得分:3)
结构
./src/groovy/com/mycompany/tools/EncodeFile.groovy
应该是
./src/main/groovy/com/mycompany/tools/EncodeFile.groovy
Gradle认为您没有源代码(由于缺少main
目录)
另外,如果您将gradle文件更改为(添加应用程序插件):
plugins {
id 'groovy'
id 'application'
id 'com.github.johnrengelman.shadow' version '1.2.2'
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.4'
}
version = '0.1'
mainClassName = 'com.mycompany.tools.EncodeFile'
shadowJar {
mergeServiceFiles()
}
然后你获得了相同的shadowJar功能,但是你也可以获得gradle run
来运行未经过调整的应用