我正在尝试使用Groovy主类构建可执行JAR。我可以让Java主类完全按预期运行,但是找不到Groovy等价物并且不会运行。
在src / main / groovy / foo / Test.groovy中:
package foo
public class Test { // (Yes, the public keywords here and below are redundant)
public static void main(String[] args) {
println "groovy world"
}
}
在src / main / groovy / foo / Test2.java中:
package foo;
public class Test2 {
public static void main(String[] args) {
System.out.println("java world");
}
}
Gradle文件:
plugins {
id 'java'
id 'groovy'
id 'application'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
mainClassName = 'foo.Test'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.7'
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}
我建立了一个JAR:
$ ./gradlew build
尝试运行它(覆盖清单Main-Class):
$ java -cp build/libs/test-groovy-main.jar foo.Test2
java world
$ java -cp build/libs/test-groovy-main.jar foo.Test
Error: Could not find or load main class foo.Test
如果我在执行此操作时打开详细输出,在第二种情况下,我会看到“Loaded foo.Test2”,但在第一种情况下没有“Loaded foo.Test”。
我原以为Groovy源代码编译为普通的java类,并且确实反编译了Test.class文件,我可以在public static main(String...)
Test类中看到public
方法。我做错了什么?
我在Ubuntu 16.04上使用Gradle 2.6,Java 1.8.0和Groovy 2.4.7。
我在版本控制中有测试用例:
答案 0 :(得分:2)
从部分添加为我工作:
jar {
manifest {
attributes 'Main-Class': mainClassName
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
它将org.codehaus.groovy:groovy-all:2.4.7依赖项放到你的jar中。
<强> UPD 强>