Java JAR无法在类路径上加载类?

时间:2017-09-20 19:14:03

标签: java jar

我有一个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概念)工作的任何建议都将非常感激。

1 个答案:

答案 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;);

  • 右键点击您的项目 - &gt;导出... - &gt; Runnable JAR文件 - &gt;启动配置(选择主类)并选中库处理:将所需库提取到生成的JAR

Eclipse将自动重新打包所有参考库,不会出现任何安全问题和ClassNotFound例外情况。

2)我们应该将项目转换为Maven项目。然后使用特殊插件生成JAR并创建自定义库的依赖项。

3)我们甚至可以使用Intellij Idea生成它。但是我们应该使用配置来创建应用程序的工件,其中所有已签名的库都将位于生成的jar之外。

我认为第一个变体是最简单的。核实。如果它没有帮助,我将用更多细节描述其他方法。