繁体   English   中英

Java as jar在子库中找不到类

[英]Java as jar can't find classes in sublibrary

我是Java新手,遇到了令我困惑的问题。 我有一个用IntelliJ编写的应用程序MyApp。 该应用程序使用Microsoft的sqljdbc42.jar与外部数据库MyLib.jar进行通信。 MyLib.jar和sqljdbc.jar都在IntelliJ中设置为外部库。

我的问题是,当我在IDE中运行应用程序时,我的应用程序运行良好,但是当我使用“生成工件”创建jar时,尝试连接数据库时jar错误出现。

错误: class java.lang.ClassNotFoundException | com.microsoft.sqlserver.jdbc.SQLServerDriver class java.lang.ClassNotFoundException | com.microsoft.sqlserver.jdbc.SQLServerDriver

这是sqljdbc42.jar中的类。 我假设这意味着MyApp.jar在sqljdbc42.jar中看不到类。

由于签名方式,无法将sqljdbc42.jar包含在MyApp.jar中。 相反,我将文件与MyApp.jar放在同一文件夹中,这是我的MANIFEST.MF:

Manifest-Version: 1.0
Class-Path: sqljdbc42.jar
Main-Class: com.mycompany.myapp.Main

这是文件布局:

- MyApp_jar/
  - sqljdbc42.jar
  - MyApp.jar

据我所知,我还有另一个应用程序以相同的方式设置,并且.jar使用相同的类可以正常工作。

更新 -我尝试包含的.jar文件是一个签名的jar。 我尝试包括的任何其他jar文件都可以正常工作。 这是要测试的示例应用程序:

import com.microsoft.sqlserver.jdbc.SQLServerDriver;
public class Main
{
public static void main(String[] args)
{
    try {
        System.out.println(SQLServerDriver.class);
    } catch (Exception e) {
        e.printStackTrace();
    }

}
}

这是我无法使用的jar: https : //www.microsoft.com/zh-cn/download/details.aspx?id=11774 (4.2版)

运行jar文件而不是类:

java -jar MyApp.jar

并且应该将sqljdbc42.jar添加到类路径中。

我从给定的URL下载了档案sqljdbc_4.2.6420.100_enu.tar.gz ,并提取了sqljdbc42.jar

以下步骤按预期工作

Main.java

package com.mycompany.myapp;
import com.microsoft.sqlserver.jdbc.SQLServerDriver;
public class Main {
    public static void main(String[] args) {
        System.out.println(SQLServerDriver.class);
    }
}

MANIFEST.MF

Manifest-Version: 1.0
Class-Path: sqljdbc42.jar
Main-Class: com.mycompany.myapp.Main

当前目录中的文件

Main.java
manifest.mf
sqljdbc42.jar

编译

javac -d . -cp sqljdbc42.jar Main.java

这将创建类文件.\\com\\mycompany\\myapp\\Main.class

创建JAR

jar vcmf manifest.mf MyApp.jar com/

产量

added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/mycompany/(in = 0) (out= 0)(stored 0%)
adding: com/mycompany/myapp/(in = 0) (out= 0)(stored 0%)
adding: com/mycompany/myapp/Main.class(in = 466) (out= 321)(deflated 31%)

运行JAR

java -jar MyApp.jar

产量

class com.microsoft.sqlserver.jdbc.SQLServerDriver

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM