我尝试了一个非常简单的groovy脚本
class HelloGroovy {
public static void main(args) {
println("hello groovy")
}
}
并通过 groovy
将其编译成 .class
文件
mkdir out && groovyc helloGroovy.groovy
out目录的唯一内容是单个类文件
cd out && ls
> HelloGroovy.class
我尝试将这个类打包成一个以HelloGroovy作为入口点的jar .
jar cfe foo.jar HelloGroovy HelloGroovy.class
但是当我试图运行生成的jar时,无法使用 java -jar foo.jar
加载主类
java -jar foo.jar
> Error: could not find or load main class HelloGroovy
我检查了jar文件,清单列表 HelloGroovy
为 Main-Class
, javap HelloGroovy.class
表明有一个带有适当参数结构的main方法 .
public class HelloGroovy implements groovy.lang.GroovyObject {
public static transient boolean __$stMC;
public HelloGroovy();
public static void main(java.lang.String...);
protected groovy.lang.MetaClass $getStaticMetaClass();
public groovy.lang.MetaClass getMetaClass();
public void setMetaClass(groovy.lang.MetaClass);
public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
public java.lang.Object getProperty(java.lang.String);
public void setProperty(java.lang.String, java.lang.Object);
}
为什么java不能找到HelloGroovy类并执行main方法?
我觉得该程序无法打印是有道理的,因为我知道,groovy标准库不在类路径上 . 但是,我仍然希望它能够找到原来的课程而且很困惑 .