2011-02-25 37 views
1

我在使用Nexus作爲存儲庫管理器的Maven項目上工作。總之有3個部分:「商業」(包裝在.jar中),「網絡」(包裝在.war中)和「耳朵」(將整個東西包裝在.ear中)在Nexus上上傳一個jar後Maven項目中的ClassNotFound異常

我工作得很好,但最近我一直在試圖增加一個「自定義」罐子(用於MD5密碼轉換)到存儲庫,它沒有工作這麼好,我做了以下內容:

  • 了java的從網站的文件(www.twmacinta.com )用md5轉換字符串。
  • 用它作爲我的項目中的java文件,它工作得很好,然後我決定把它做成一個罐子。
  • 用javac編譯源代碼。
  • 使用「jar」命令創建存檔(「com/twmacinta/util/MD5-2.7.1.jar」)。
  • 連接到Nexus並上傳罐子。
  • 在Businness部分找到我的pom.xml文件,通過選項卡「Dependency」和「Add ...」(它找到了jar,沒問題)添加依賴關係,將它添加到我的pom.xml文件中:

    <dependency> 
        <groupId>com.twmacinta.util</groupId> 
        <artifactId>MD5</artifactId> 
        <version>2.7.1</version> 
    </dependency> 
    
  • 加在我的生意類進口(它會自動發現進口,沒有問題)是這樣的:

    import com.twmacinta.util.MD5;

有在THI沒有錯誤所以我去幹淨/安裝/重新部署,一切都很好。

但是,當我試圖登錄我的申請,我得到了以下異常:

java.lang.ClassNotFoundException: com.twmacinta.util.MD5 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    [...] 

的MD5-2.7.1.jar顯示了在商業和耳朵的MavenDependencies,它看起來像任何其他圖書館我已經使用(對於所有我可以告訴),所以我不明白這一點...

請幫我=)

薩科

回答

1

JAR文件應位於com/twmacinta/util/MD5/2.7.1/MD5-2.7.1.jar

只是比較其他工件,這就是如何與Maven 2+組織。

+0

是的,它是在Nexus下,像其他瓶子一樣,從這一側沒有問題,我認爲=) – Nicolas

+0

糟糕,我的意思是「它就像這樣在Nexus上」,com/twmacinta/util/MD5/2.7.1/MD5 -2.7.1.jar層次結構 – Nicolas

+0

如果您的項目是一個Web項目,jar文件是否與應用程序(web-inf/lib)一起正確部署?我知道,在以前的Eclipse WTP版本中,需要手動修改Java EE依賴關係,否則將不會部署jar(替代方法是執行mvn eclipse:clean eclipse:eclipse來重新生成文件..) – dSebastien

1

可能申請沒有得到妥善得到發表..

+0

,但它在以前工作正常,並且我已經使用了「external」jar wicket-contrib-javaee與我的最終檔案庫MD5 – Nicolas

1

這聽起來像庫未在耳朵或戰爭捆綁在一起。
你在哪裏綁定你的依賴關係?

  • ...戰爭/ WEB-INF/lib目錄
  • 或...ear/lib

檢查兩個存檔內部,檢查其他外部庫的綁定位置,然後檢查它們是否聲明爲父級或war或ear模塊的依賴關係。

編輯:
好的,請檢查您創建的jar文件的內容。
對MD5-2.7.1.jar
jar -tvf MD5-2.7.1.jar
這應該列出文件的內容運行以下命令,確保COM/twmacinta/UTIL/MD5.class在罐子裏的根目錄中所列,並且任何附加的子目錄沒有被包括在該jar中,從而導致類條目,例如build/com/twmacinta/util/MD5.class
此外,在看了源代碼之後,我注意到該庫可以滿足本機JNI或Java實現,但有多種方法可以使用各種系統屬性來禁用本地接口,否則您需要確保相應的本機庫在預期的位置可用。

+0

完全相同的存儲庫是「耳朵」,在它下面我可以看到「Maven Dependencies」與我的所有庫,包括「MD5-2.7.1」我還有一個未版本控制的文件夾「target/MyProject-ear -1.0-SNAPSHOT「,我可以看到」Manifest.MF「和我的所有罐子,包括再次」MD5-2.7.1「 – Nicolas