因此,我一直在寻找几个小时和几个小时,我在这里完全跑进了这个砖墙。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