2015-10-02 63 views
6

我正在使用IntelliJ Idea。我已經構建了我的應用程序並將其創建爲.jar文件。該程序爲其數據庫驅動程序使用外部文件.jar使用外部罐子時的ClassNotFoundException

當我從IDE運行程序時,它工作正常。當我嘗試運行我的.jar文件在IDE之外,它報告了以下異常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/microsoft/sqlserver/jdbc/SQLServerException 
     at ca.vdts.dbupdate.Main.main(Main.java:10) 
Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerException 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 

sqljdbc42.jar文件的目錄清單中。 我在Windows上,我想通過點擊'.jar'文件來運行它。 應用程序.jar文件和sqljdbc42.jar文件都在同一個目錄中。在命令行中,執行...

C:\Users\admin\IdeaProjects\DBUpdate\out\artifacts\DBUpdate>java -classpath .\sqljdbc42.jar;DBUpdate.jar -jar DBUpdate.jar 

...導致同樣的錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: com/microsoft/sqlserver/jdbc/SQLServerException 
     at ca.vdts.dbupdate.Main.main(Main.java:10) 
Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerException 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 1 more 
+1

你在命令行上運行了什麼命令?位於文件系統中的sqljdbc42.jar位於何處? – Tunaki

+1

當您在IDE中運行程序時,IDE會將此jar添加到'classpath',但是當您自己運行此程序時,您不會這樣做,因此您會收到錯誤消息。當您啓動程序時,將此驅動程序jar文件添加到類路徑中。 –

回答

3

嘗試用運行應用程序:

java -classpath sqljdbc42.jar:Application.jar -jar Application.jar 

更換:用在Windows下爲;