簡體   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