我有一个jar文件,它使用第二个jar文件中的类。但是,当我运行第一个jar文件时,我得到一个异常,即无法找到该类。我无法找到有关如何解决问题的任何文档。
我有两个.jar文件,MyApp.jar和sqljdbc42.jar。这两个.jar文件都在同一目录中。
MyApp.jar主要包含以下代码:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
MyApp.jar的清单具有以下内容:
Manifest-Version: 1.0
Main-Class: com.mycompany.myapp.MyApp
Class-Path: sqljdbc42.jar
<blank line>
类com.microsoft.sqlserver.jdbc.SQLServerDriver
位于jar sqljdbc42.jar中。
执行MyApp.jar时,会发生以下异常:
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
使用内置IntelliJ的Java 8,通过在7Zip中打开jar来验证清单内容。 关于如何将这个(看似简单,基本的Java JAR概念)工作的任何建议都将非常感激。
答案 0 :(得分:0)
有三种方法可以解决您的问题:
1)您可以使用IDE&#34; Eclipse Neon&#34;生成您的jar。
在项目中创建文件夹&#34; lib&#34;并将sqljdbc42.jar
加入其中;
将sqljdbc42.jar
添加到classPath:Properties - &gt; Java构建路径 - &gt;图书馆 - &gt;添加JAR ...(从&#34; lib&#34中选择你的jar;);
Eclipse将自动重新打包所有参考库,不会出现任何安全问题和ClassNotFound
例外情况。
2)我们应该将项目转换为Maven项目。然后使用特殊插件生成JAR并创建自定义库的依赖项。
3)我们甚至可以使用Intellij Idea生成它。但是我们应该使用配置来创建应用程序的工件,其中所有已签名的库都将位于生成的jar之外。
我认为第一个变体是最简单的。核实。如果它没有帮助,我将用更多细节描述其他方法。