2011-12-02 43 views
2

我是Java的新手,但目前爲止我找到了很好的方法。我的應用程序現在需要到MySQL的連接,從而爲每噸教程,我做這樣的事情:Portably找到一個Java類

Class.forName ("com.mysql.jdbc.Driver").newInstance(); 
Connection con = DriverManager.getConnection (url, userName, password); 

這是所有罰款,除外,我需要在我的CLASSPATH如果MySQL JDBC驅動程序的位置Java永遠找不到它。我用Gentoo開發的機器在/usr/share/jdbc-mysql/lib/jdbc-mysql.jar中,但是我的Debian服務器將運行該應用程序,它在/usr/share/java/mysql.jar中。因此,在各種Linux發行版中,位置可能會有所不同。

我可以在Eclipse中設置classpath中,不過那是無意義的,因爲部署的機器上,我不會在Eclipse中運行它。我可以編寫一個封裝外殼腳本,它可以找出驅動程序的位置,並設置CLASSPATH,但這看起來很痛苦。

什麼是我的應用程序查找驅動程序的正確方法,無論身在何處配送店呢?

在其他編程語言中,我習慣於這是自動的。在perl中,我寫「使用Package :: Name」,它只是發現它,不管分發存儲在哪裏。在C中,動態庫自動在/ usr/lib /中找到。

任何幫助表示感謝,謝謝!

回答

4

一種可能性不是依靠操作系統發行版來提供依賴性並自行發佈它。大多數應用程序都是這樣工作

或者,可以要求用戶將該jar放置在您的應用程序已知的位置。

+0

恩,是的,那是可能的。我不知道這是許多其他應用程序這樣做的方式。但是這樣mysql驅動程序不會被系統更新,除非我手動更新和重新部署。但這很可能不是問題。 – jlh

0

如果您有安裝腳本,那麼您可以在其中找到jar文件並設置類路徑。

然而,我們通常做的是讓位於我們的java程序一個lib文件夾,並把需要的jar文件存在。這樣我們也可以控制使用哪些版本。

0

這將取決於你打算如何構建它。如果您使用vanilla java jar包裝作爲源代碼,那麼您可能需要使用相對而非文字路徑才能實現此功能。

0

您可以將您的sql驅動程序存儲在您的應用程序的lib文件夾中。

0
Class.forName ("com.mysql.jdbc.Driver") 

對於多個JDBC版本,您並不需要這麼做。

+0

由於JDBC 4.0,* if *驅動程序實際上困擾添加serviceloader信息 –