java - 在类路径中使用具有多个库的自定义 list 创建 jar

标签 java eclipse jar manifest

我正在尝试从我的 eclipse 创建一个 jar,为了能够使用外部 .jars,我在类路径中使用这个 list 和多个 .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

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

java.lang.NoClassDefFoundError: com/thoughtworks/xstream/XStream

但是当我将它们放入类路径时,错误变为:

java.lang.NoClassDefFoundError: src/BatchTester

所以它似乎找不到我的主类。我已经在类路径中尝试了几种可能性,例如添加或删除 . 到类路径,但无法使其工作。

知道如何解决这个问题吗???

感谢您的时间和努力,


PS:创建 .jar 后, list 中的类路径如下所示:

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 

使用新行和空格,但即使将其更改为“正确”格式后,我也遇到了同样的问题。

PS2:我知道使用像 Fat-Jar 这样的插件可以让它工作,但我不想在我的 .jar 中插入比需要更多的数据

最佳答案

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

这是 Ant (万一对某人有用):

<?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>

关于java - 在类路径中使用具有多个库的自定义 list 创建 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929438/

相关文章:

java - Activity setTitle 与 Toolbar setTitle 有什么区别

java - 如何使用 StringBuilder 重建字符串?

java - 如何调整输入图像的大小

java - 异常 org.springframework.beans.factory.CannotLoadBeanClassException : Cannot find class

java - 如何将多个 jar 合并为一个?

javascript - 得到 404 错误,不知道为什么

java - 对象引用和对象哈希码之间的区别

java - JAR 文件在文件系统的不同位置表现不同

java - JSON.stringify(array) 从 jsp 到 servlet(仅使用 javax.json-api1.0.jar 或 javax.json-1.0.jar 循环)

java - 导出到 .JAR 时不会抓取资源