因此,我一直在尋找幾個小時和幾個小時,我在這裏完全跑進了這個磚牆。maven:從JDK中排除罐子
我的問題很簡單:我有一個(很大)的項目,我想用Maven構建(所以我可以自動化所有這一切)。除了一個主要問題,一切都很好。
我有一個名爲「java-plugin」的依賴關係 - 我不確切知道源或作者,但它是依賴於我的依賴關係 - 我將它添加到我們自己的Nexus第三方使用原始jar名稱的存儲庫。
這個插件會從我的Nexus加入沒有任何問題,但它具有以下結構:
- netscape
-- javascript
JSException.class
JSObject.class
JSUtil.class
-- security
ForbiddenTargetException.class
ParameterizedTarget.class
Principal.class
Privilege.class
PrivilegeManager.class
PrivilegeTable.class
Target.class
UserDialogHelper.class
UserTarget.class
- sun
-- plugin
...
-- plugin2
...
- com.sun.java.browser.plugin2
...
什麼問題?只要我在一個基於Eclipse的項目中工作,我就把JDK作爲我的類路徑中的「最後一個」。現在它是Maven,顯然Maven首先將JDK放在了JDK上。在我的JDK中,我有jfxrt.jar
(Java FX的一部分)。這一個也包含netscape.javascript.JSObject
對象(也是一個netscape.javascript.JSException
對象)。它不包含另一方面的netscape.javascript.JSUtil
對象。所以Maven從JDK庫中獲取JSObject
和JSException
,以及他從我自己的java插件依賴項中選擇的其他類。
當然這兩個類是不一樣的。當然,現在我得到了編譯錯誤,因爲java-plugin依賴項在JSObject
類中包含'getWindow'方法,而JDK庫不包含該方法。
理想的情況是從Maven中排除jfxrt.jar
,但我絕對不知道如何做到這一點。任何其他解決方案都可以,只要我能用Maven構建這個解決方案。注意:如果可能的話,我不想在Java中使用「認可」機制,因爲這需要一次又一次地將這個庫上傳到多個不同的服務器,並且會導致部署的巨大延遲(因爲我們一直需要將該文件發送給我們的支持團隊以再次上傳)。
謝謝!
編輯
所以,我的插件依賴的東西,這也是在JDK中 - 甚至更好!我不需要我的java插件,我已經足夠用我的JDK,其中包括plugin.jar自動(它在我的${java.home}/lib/plugin.jar
)。
現在我有這樣的情況:
正如你所看到的,jfxrt.jar至上,plugin.jar之前。我可以看到,爲什麼Maven或Java更普遍,只要找到第一個netscape.javascript.JSObject
(位於jfxrt.jar中)就停止查找。但我真的需要它加載第二個JSObject類(不幸的是,它恰好在同一個包中,並且名稱相同)。我該怎麼做這件事?爲什麼在Eclipse中沒有魅力,當我不使用Maven的時候,爲什麼它在IntelliJ和Maven一起工作?
在此先感謝!
看看[這些建議](http://maven.40175.n5.nabble.com/Removing-JDK-from-compile-classpath-td5713254.html)可以爲你工作(我不知道這些,我剛剛找到他們)。 – watery 2014-10-08 11:54:48
不,他們沒有幫助,但我認爲這是一個主要的IntelliJ問題,而不是Maven問題。在這一個上失去了幾個小時......謝謝! – testuser 2014-10-08 12:40:23