我尝试了一个非常简单的groovy脚本
class HelloGroovy {
public static void main(args) {
println("hello groovy")
}
}
并通过.class
groovy
文件
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标准库不在类路径上。但是,我仍然希望它能够找到原来的课程而且很困惑。