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中。
-
启动Eclipse并创build一个新的Java项目,创build一个新的包“mypackage”,添加你的主类:
Runner
把这段代码放在那里。 -
现在包括来自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。 -
在eclipse中运行程序,它应该运行,并告诉你,用户名/密码是无效的,这意味着Eclipse已经正确configuration了jar。
-
在Eclipse中转到
File
– >Export
– >Java
– >可运行Runnable Jar File
。 你会看到这个对话框:确保设置“另存为ant脚本”checkbox。 这是什么使它,所以你可以使用命令行以后做一个
ant jar
。 -
然后去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_jar
为jar
。
然后,从MyProject
inputant 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-解决方法