Eclipse:如何build立一个外部jar的可执行jar?

我想build立一个可执行的jar程序,这取决于下载的外部jar。 在我的项目中,我将它们包含在构buildpath中,并可以在eclipse中运行和debugging。

当我试图将它导出到一个jar文件时,我可以运行该程序,但当我尝试按下包含来自外部jar的函数调用和类的button时,我无法运行该程序。 我已经编辑了环境variables(Windows XP)CLASSPATH以包含所有外部jar的path,但是不起作用。

需要注意的一点是,在导出可执行文件的jar文件时,我得到了编译警告,但没有显示关于警告的任何描述。

会有人亲切地提供一个彻底的指导,如何包括使用eclipse的外部jar程序?

Eclipse 3.5可以将所需的库打包到可运行jar中。 文件 – >导出…select可运行jar,然后单击下一步。 可运行的jar导出窗口有一个单选button,您可以select将所需的库打包到jar中。

你可以通过为你的jar 写一个清单来做到这一点。 看看类path头。 Eclipse有一个选项可以在导出时select你自己的清单。

另一种方法是在调用应用程序时将依赖关系添加到类path中:

win32: java.exe -cp app.jar;dependency.jar foo.MyMainClass *nix: java -cp app.jar:dependency.jar foo.MyMainClass 

如何将您的项目的jar子包含到可运行jar中:

我正在使用在Ubuntu 12.10上运行的Eclipse版本:3.7.2。 我还将向您展示如何创buildbuild.xml以便您可以从命令行执行ant jar ,并使用提取到的其他导入的jar来创buildjar。

基本上你要求Eclipse构buildbuild.xml,将你的库导入到你的jar中。

  1. 启动Eclipse并创build一个新的Java项目,创build一个新的包“mypackage”,添加你的主类: Runner把这段代码放在那里。

    在这里输入图像描述

  2. 现在包括来自Oracle的mysql-connector-java-5.1.28-bin.jar ,它使我们能够编写Java连接到MySQL数据库。 通过右键单击项目 – > properties – > java build path – > Add External Jar – >selectmysql-connector-java-5.1.28-bin.jar。

  3. 在eclipse中运行程序,它应该运行,并告诉你,用户名/密码是无效的,这意味着Eclipse已经正确configuration了jar。

  4. 在Eclipse中转到File – > Export – > Java – >可运行Runnable Jar File 。 你会看到这个对话框:

    在这里输入图像描述

    确保设置“另存为ant脚本”checkbox。 这是什么使它,所以你可以使用命令行以后做一个ant jar

  5. 然后去terminal,看看ant脚本:

    在这里输入图像描述

所以你看,我运行的jar,它没有出错,因为它发现包含在Hello.jar内的mysql-connector-java-5.1.28-bin.jar

查看Hello.jar: vi Hello.jar ,你会看到许多对com/mysql/jdbc/stuff.class

要在命令行上执行ant jar来自动执行所有这些操作:将buildant.xml重命名为build.xml ,并将目标名称从create_run_jarjar

然后,从MyProjectinputant jar和boom。 你在MyProject里面有你的jar。 你可以使用java -jar Hello.jar来调用它,它可以工作。

作为一个良好的习惯,您可以使用Ant脚本 (Eclipse附带)来生成您的JAR文件。 在这个JAR里面,你可以拥有所有依赖库。

你甚至可以设置MANIFEST的Class-path头指向文件系统中的文件,但这不是一个好习惯。

Ant build.xml脚本示例:

 <project name="jar with libs" default="compile and build" basedir="."> <!-- this is used at compile time --> <path id="example-classpath"> <pathelement location="${root-dir}" /> <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" /> </path> <target name="compile and build"> <!-- deletes previously created jar --> <delete file="test.jar" /> <!-- compile your code and drop .class into "bin" directory --> <javac srcdir="${basedir}" destdir="bin" debug="true" deprecation="on"> <!-- this is telling the compiler where are the dependencies --> <classpath refid="example-classpath" /> </javac> <!-- copy the JARs that you need to "bin" directory --> <copy todir="bin"> <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" /> </copy> <!-- creates your jar with the contents inside "bin" (now with your .class and .jar dependencies) --> <jar destfile="test.jar" basedir="bin" duplicate="preserve"> <manifest> <!-- Who is building this jar? --> <attribute name="Built-By" value="${user.name}" /> <!-- Information about the program itself --> <attribute name="Implementation-Vendor" value="ACME inc." /> <attribute name="Implementation-Title" value="GreatProduct" /> <attribute name="Implementation-Version" value="1.0.0beta2" /> <!-- this tells which class should run when executing your jar --> <attribute name="Main-class" value="ApplyXPath" /> </manifest> </jar> </target> 

试试fat-jar扩展。 它将包括jar子里的所有外部jar子。

  • 更新url: http : //kurucz-grafika.de/fatjar
  • 主页: http : //fjep.sourceforge.net/

看看@ java-jar-ignores-classpath-解决方法