2011-11-16 82 views
3

我使用eclipse创建可执行jar。它依靠外部其他罐子。
在Eclipse中,很简单,你只需要选择Extract required libraries into generated JAR
您可以创建一个可执行的jar。它可以在jre安装的任何地方执行。java eclipse创建可执行jar

但是如果我使用命令行来编译jar。
javac -classpath [external jars] *.java
jar cfm [a name].jar manifest *.class [external jars]

它可以生成JAR。但该jar只能在其生成的目录中执行。 如果我把它放到另一个目录或机器上,它会投诉NoClassDefFoundError

所以,我的问题是,我如何使用命令行生成可执行的jar作为Eclipse。

+0

你是否尝试选择所需的包到生成的jar而不是提取包所需的库? – MBU

+0

我对Eclipse没有任何问题。 Eclipse生成的jar可以在任何地方执行。我的问题是如何使用命令行来做到这一点。 – chnet

+0

你用winrar或类似的东西打开jar文件来检查其他jar是否被打包在里面? – Tudor

回答

3

一个jar文件的内部不能有它的依赖jar包。在Eclipse的情况下,它将从依赖瓶中解压所有类,并将其与您的类文件一起捆绑到单个jar中。如果不是在Eclipse的方式,你需要

1)创建清单文件,该文件列出了所有的依赖罐子

Manifest-Version: 1.0 
Main-Class: Your Main class 
Class-Path: dependency1.jar dependency2.jar dependency3.jar 
dependency4.jar dependency5.jar 

2)使用类路径包括所有的依赖类文件创建的jar罐子和使用上面创建的mainfest文件。

3)在你创建jar的同一个文件夹中,放置所有的依赖jar。

现在你的文件夹将这个样子,

yourjar.jar(与上面创建的清单文件) dependency1.jar dependency2.jar dependency3.jar dependency4.jar dependency5.jar

4)现在,如果你想分享这个,你需要共享这个文件夹,你可以从这个文件夹启动你的jar。这是您的可执行文件夹,您可以从任何地方运行它。

+0

是的。我用你的方法。我需要共享该文件夹并从该文件夹启动jar。但是,如果我使用Eclipse生成jar,我不需要该文件夹。我可以将jar(不是文件夹)放在任何地方。 – chnet

+0

对于单个罐子,如果任何依赖罐子上有任何更新,则需要将整个罐子重新捆绑;你不能简单地构建和替换修改后的依赖关系jar。通过这种方法,您可以更新修改过的罐子。 –

2

Eclipse中使用Ant的jar包文件,你可以节省使用Eclipse生成JAR选中复选框保存在出口窗口Ant文件的Ant脚本:

screenshot

这样,就可以生成Ant Build.xml脚本,然后在不使用eclipse的情况下直接使用ant直接从命令行执行它。

0

我最喜欢的创建可执行jar的方法是使用一个名为one-jar的工具。我有一篇博客文章,讨论如何在maven和ant中使用它:my one jar blog post

+0

该URL现在提供404错误。你是指[这个](http:// chrisjordan。CA /后/ 15052417887 /建筑自包含可执行-罐-2-方式)? –

相关问题