![](/img/trans.png)
[英]Problems running proguard for single jar - can't find java classes
[英]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.