Ant 来自groovy源代码的可执行jar
我无法找到以下问题的正确答案:在从groovy编译的源代码创建可执行jar时,我不能简单地将Ant 来自groovy源代码的可执行jar,ant,groovy,executable-jar,Ant,Groovy,Executable Jar,我无法找到以下问题的正确答案:在从groovy编译的源代码创建可执行jar时,我不能简单地将groovy all version.jar包含在lib目录中(就像在java中那样)但是我需要从jar中提取所有类,并用我自己的类对它们进行打包,否则会出现异常。实际上,我可能想使用的所有库都是这样 不清楚?让我们看一个例子 属于包titi的toto.groovy编译在build目录中,如下所示: build lib groovy-all-1.8.4.jar titi
groovy all version.jar
包含在lib目录中(就像在java中那样)但是我需要从jar中提取所有类,并用我自己的类对它们进行打包,否则会出现异常。实际上,我可能想使用的所有库都是这样
不清楚?让我们看一个例子
属于包titi
的toto.groovy
编译在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
使用build.xml
中的以下ant
目标创建可执行jar:
<jar destfile="${build.exe.dir}/${exe.name}"
basedir="${build.dir}"
manifest="${src.conf.dir}/MANIFEST.MF"
/>
(我已经检查了groovy.lang.Script
类是否存在。)
另一方面,如果我通过在jar
之前添加unjar
任务来取消groovy all version.jar
中的。好的,它可以工作,但它会减慢编译过程,我想了解
非常感谢您的反馈。相对于lib
和titi
目录,目标目录在哪里?如果它是同级,那么清单中的类路径应该从编译源代码的地方开始。目标是toto.jar的目标。jar包含build中的内容:lib目录,其中包含groovy-all-version.jar、所有类文件和我想我看到的声明——那么您要将groovy-all-jar文件本身放在主jar中?这是行不通的,因为如果没有帮助,Java无法从jar-inside-a-jar加载类。manifest类路径在相对于这个jar位置的路径上引用了其他jar,而不是在它里面。@Robert:好吧,这就是我打包java程序的方式:在可执行文件jar
中捆绑的lib
目录中的所有jar-ed-lib,manifest中的Class-Path
子句列出了所有jar:lib/lib1.jar,lib/lib2.jar,…
。
$ java -jar target/toto.jar
Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/Script