使用自定义清单创建jar,其中包含classpath中的多个库

mag*_*iez 4 java eclipse jar manifest

我正在尝试从我的eclipse创建一个jar,为了能够使用外部.jars,我在类路径中使用这个带有多个.jars的清单:

Manifest-Version: 1.0
Sealed: true
Main-Class: src.BatchTester
Class-Path: . P:/Tools/xstream/1.4.2/lib/kxml2-2.3.0.jar P:/Tools/xstream/1.4.2/lib/xstream-1.4.2.jar P:/Tools/StringTemplate/4.0.5/lib/antlr-3.3-complete.jar P:/Tools/StringTemplate/4.0.5/lib/ST-4.0.5.jar P:/Tools/Jdbc/lib/sqljdbc4.jar
Run Code Online (Sandbox Code Playgroud)

显然,如果我没有将库放在类路径中,则会出现以下错误:

java.lang.NoClassDefFoundError: com/thoughtworks/xstream/XStream
Run Code Online (Sandbox Code Playgroud)

但是当我把它们放在类路径中时,错误会变为:

java.lang.NoClassDefFoundError: src/BatchTester
Run Code Online (Sandbox Code Playgroud)

因此,它无法找到我的主要课程.我在类路径中.尝试了几种可能性,比如添加或删除类路径,但无法使其工作.

知道怎么解决这个???

感谢您的时间和精力,


PS:创建.jar之后,清单里面的类路径看起来像:

Class-Path: . P:/Tools/xstream/1.4.2/lib/kxml2-2.3.0.jar P:/Tools/xstr
 eam/1.4.2/lib/xstream-1.4.2.jar P:/Tools/StringTemplate/4.0.5/lib/ant
 lr-3.3-complete.jar P:/Tools/StringTemplate/4.0.5/lib/ST-4.0.5.jar P:
 /Tools/Jdbc/lib/sqljdbc4.jar 
Run Code Online (Sandbox Code Playgroud)

使用新的线条和空格,但即使将其更改为"正确"格式,我也遇到了同样的问题.

PS2:我知道有一些像Fat-Jar这样的插件你可以使它工作,但我不想在我的.jar中插入超过需要的数据

mag*_*iez 7

最后,我将所有的lib复制到/ lib文件夹中,然后将它们添加到带有ant目标的.jar中,因为IT人员似乎没问题(因为它是一个小应用程序).

这是蚂蚁(如果对某人有用):

<?xml version="1.0" encoding="UTF-8"?>
<project name="BatchTester" default="compile" basedir=".">
    <property name="external" value="lib/external-libs.jar"/>
    <target name="compile">
        <javac srcdir="jav"
               source="1.6"
        />
        <echo>Creating jar File</echo>
        <!--create a new .jar with all the external jars in /lib-->
        <jar jarfile="${external}">
            <zipgroupfileset dir="lib/">
                <include name="**/*.jar"/>
            </zipgroupfileset>
        </jar>
        <!--<sleep seconds="1"/>-->
        <!--create .jar file-->
        <jar jarfile="BatchTester.jar" index="true" filesetmanifest="mergewithoutmain">
            <fileset dir=".">
                <include name="**/jav/**/*.class"/>
                <exclude name="**/jav/**/*.java"/>
            </fileset>
            <zipfileset src="${external}">
                <exclude name="META-INF/*.SF"/>
            </zipfileset>
            <manifest>
                <attribute name="Main-Class" value="jav.BatchTester"/>
            </manifest>
        </jar>
        <!--delete previously created extern .jar-->
        <delete file="${external}"/>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)