我是Java(和Eclipse)的新手,但我使用了.NET(和Visual Studio)相当多的东西。我也知道编译C / C ++代码等等。我知道最后我得到一个可以从命令行运行的EXE或一个漂亮的二进制文件。
我一直在制作一个使用一些外部库的Java实用程序。我需要将它编译成一个可执行文件,我可以从unix机器上的命令行运行,但我找不到任何方法来执行此操作。
我可以在Eclipse中构建和运行/调试,但这对我没有用,因为这段代码将在web服务器上运行。我只需要将所有依赖项编译到一个文件中但是在Google上搜索了几个小时后,我能找到的最好的东西是Eclipse的Fat-JAR插件,在使用之后我在尝试运行文件时遇到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: Network/jar
这让我感到困惑,因为能够做到这一点非常重要我确信我一定会错过一些令人眼花缭乱明显的东西,但正如我所说,经过几个小时的搜索,我无处可去。
我非常感谢你能给我的任何帮助。感谢。
答案 0 :(得分:0)
你正在做一些标准的事情,你正在使用eclipse。这意味着,在您的情况下,Maven是您的朋友。下载并安装M2Eclipse plug-in。 Maven最擅长管理依赖项。因此,创建一个包含依赖项的jar将非常非常直接。 Web和StackOverflow中有数千个示例。如果您在设置时遇到问题,请对此进行评论,我可以指出您正确的方向。
答案 1 :(得分:0)
听起来需要修改服务器上的类路径以获取包含Network类的jar文件。你是如何执行你的程序的?您在-cp选项中添加了哪些路径?
如果您不确定如何查找jar文件中的内容,请运行jar tf,这将列出打包的类。验证CLASSPATH中的一个jar文件中是否有缺少的类。
向我们提供更多详情,我们可以帮助您解决问题。
答案 2 :(得分:0)
如果使用Maven构建java应用程序(可以在每个主要IDE中完成),那么可以使用maven Shade Plugin构建一个带阴影的jar文件;这是一个包含所有依赖项的jar文件。
可以从命令行运行阴影jar,如下所示:
java -jar myjar.jar command line options
答案 3 :(得分:0)
我想我应该首先解释一些基础知识。如果Java类具有public static void main(String[] args)
方法,则可以作为应用程序运行。如果它具有此方法,则可以从命令行运行它:
java my.package.MyClass <attributes>
在启动应用程序之前,您需要确保所有必需的.jar文件(以及您自己的类文件夹的根目录,如果您没有从类中创建jar)都在CLASSPATH
环境变量中
这些是绝对的基础知识。当您构建更复杂的应用程序或分发应用程序时,您可能会使用maven或ant或其他一些让您的生活更轻松的工具。