我已经在Java类中创建了一种进行某种加密的方法。此类利用一些外部jar文件中的方法。此方法的请求者要求我将我的类和外部jar文件包含在一个jar文件中。我将Eclipse用于我的IDE。据我了解,我需要在Eclipse中创建一个可执行的jar文件,以便将外部jar文件打包到我自己的jar文件中。在我的项目中,我还用自己的项目中的main方法创建了一个基类,该基类仅调用上述方法(为可执行jar的运行配置提供“主类”)。我将项目导出到可执行的jar文件,并在命令提示符窗口中验证了该项目是否已运行(java -jar jar-file-name)。我在Eclipse中创建了第二个测试项目,并将我的可执行jar文件添加到构建路径。我在此测试项目中创建了一个简单的类,该类的主要方法调用上述方法(在我的可执行jar文件中的类上)。经过编译,因此我将该项目导出到普通的jar文件,并尝试运行它(使用java -classpath可执行文件jar-提到的文件;测试项目jar文件的类名。此操作失败,并出现NoClassDefFoundError ,引用在一个外部jar文件中找到的类。
我在这里想念什么?这是我对可执行jar文件的第一次体验。在可执行jar文件中的类上调用方法时,有什么特别的事情需要做吗?
答案 0 :(得分:0)
关于可执行jar文件没有什么特别的。唯一的不同是,可执行的jar文件定义了一个主类(使用main()
方法),该主类将在您运行java -jar ...
时启动。
jar文件实际上是一个纯zip文件,其中包含类,资源和一些其他元信息。 当您运行jar文件并获取ClassNotFoundException时,这是类路径的问题。因此,您一定会丢失依赖于外部库中的类。
有两种方法可以解决您的问题:
我不知道Eclipse导出功能的作用。但我建议您先使用自己喜欢的zip实用程序查看导出的jar文件。 我还建议使用像maven这样的构建工具来创建jar。以下是使用maven程序集插件如何完成此操作的示例:https://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/