我无法找到以下问题的正确答案:从groovy编译源创建可执行jar时,我不能简单地将groovy-all-version.jar
包含在lib目录中(就像我在java中所做的那样)但我需要从jar中提取所有类并使用我自己的类打包它们,否则我会得到一个异常。实际情况就是我可能想要使用的所有库。
不清楚?我们来看一个例子。
属于包toto.groovy
的 titi
编译在build
目录中,如下所示:
build
lib
groovy-all-1.8.4.jar
titi
toto.class
并且将包含在jar中的MANIFEST.MF
包含以下行:
Main-Class: titi.toto
Class-Path: lib/groovy-all-1.8.4.jar
使用ant
中的build.xml
目标完成可执行jar创建:
<jar destfile="${build.exe.dir}/${exe.name}"
basedir="${build.dir}"
manifest="${src.conf.dir}/MANIFEST.MF"
/>
现在,如果我尝试执行jar,我会得到
$ java -jar target/toto.jar
Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/Script
(我检查过groovy.lang.Script
类是否存在。)
另一方面,如果我通过在groovy-all-version.jar
之前添加build
任务来解除unjar
中的jar
,则执行正常。好的,它有效,但它减慢了编译过程,我想了解......
非常感谢任何反馈。