![](/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.