2013-08-18 96 views
5

我正在嘗試創建可用於其他項目的庫。我用一些靜態方法編寫了一個類來做一些事情。我想嘗試一下,但我無法使用導入的JAR文件。使用IntelliJ IDEA創建Java庫文件

我已將我的代碼編譯爲工件,並將JAR文件從「out」文件夾中取出,然後將其複製到另一個項目中。之後,我去了「項目結構」,標籤「庫」,我按下了加號按鈕。我找到了JAR文件並選擇了它,之後IDEA要求我指定依賴關係,所以我做了,但是當我想在代碼中使用它時,我無法做到這一點。它甚至不能被導入。

Class from library not recognized

爲什麼它忽略我的圖書館任何想法?謝謝!

我應該怎麼做才能創建一個IntelliJ IDEA的JAR庫,可用於其他項目?

+0

你的描述有點太含糊。我可以建議你下載一些第三方庫(例如Apache Commons的東西),並嘗試在你的項目中使用它?只是爲了將問題縮小到在另一個項目中創建jar或其用法。 – SJuan76

+0

我都準備好以同樣的方式使用JSch進行SSH連接,並且它完美地工作。然而我的圖書館被忽略。我無法使用主類中的方法,也無法創建任何位於我的lib中的類的實例.. – Dropout

+1

奇怪...在IDEA中創建JAR庫並將其導入到項目中沒有什麼特別之處除了你已經寫了(至少在一般情況下)。我只是試圖重現描述中的步驟,並沒有任何問題。嘗試檢查您是否沒有將整個庫或部分庫意外標記爲排除的目錄。 –

回答

2

我想清楚我的問題是什麼。當我創建庫時,我試圖簡化它。不幸的是,太簡單了。我有一個包含一個類的包,它被編譯成一個JAR。結構如下所示:

foo 
| 
|_ MyLib.java 

但是,爲了使用創建的JAR庫中的類,必須將它們放在包中。這意味着,如果我有:

foo 
| 
|_bar 
| | 
| |_MyInnerLib.java 
| 
|_MyOuterLib.java 

我可以導入和使用方法從MyInnerLib但MyOuterLib不可達也可導入。這是我犯的錯誤。

+1

「foo」是您JAR的名稱(即* foo.jar *)嗎?您的問題背後的原因可能是(引自[「** Java語言規範**」第7.5節](http://docs.oracle.com/javase/specs/jls/se7/html/jls-7。 html * jls-7.5),重點是mine):「*未命名包中的類型(§7.4.2)沒有規範名稱,所以在每種類型的導入聲明中對規範名稱的要求意味着(a)**未命名包中的類型不能被導入**,並且(b)未命名包中的類型的靜態成員不能被導入。 – informatik01

5

您正在運行一個非常常見的依賴管理問題。

IMO的真正答案是使用像Maven,Ant或Gradle這樣的構建系統(我會自己去Gradle)。你想要做的是手工,難以複製和脆弱。

每次您進行更改時,您都必須通過手動步驟來創建新的JAR。你真的不明白你的依賴關係。

要全力以赴採用最佳實踐,您將擁有真正的構建系統,該系統可發佈到持續集成服務器,該服務器可編譯並運行測試。成功完成測試後,JAR將發佈到工件服務器(Nexus/Artifactory)。

通過在JAR中聲明依賴關係,您與之共享的人將通過構建系統使用JAR。

+0

感謝info @phil,這是非常有用的建議,但我沒有考慮JAR上的任何更新,我正在嘗試創建此刻。問題是我無法在導入到項目後訪問JAR中的類。 – Dropout