Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 来自groovy源代码的可执行jar_Ant_Groovy_Executable Jar - Fatal编程技术网

Ant 来自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编译的源代码创建可执行jar时,我不能简单地将
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