javapom怎么排除包,java–maven:从JDK中排除jar
所以,我⼀直在寻数⼩时和数⼩时,我在这⾥完全碰到了砖墙.
我的问题很简单:我有⼀个(⾮常⼤的)项⽬,我想⽤Maven构建(所以我可以⾃动完成它).到⽬前为⽌⼀切正常,除了⼀个主要问题.
我有⼀个名为“java-plugin”的依赖项 – 我不确切地知道它的来源或作者,但它是我的依赖项的依赖项 – 我将它添加到我们⾃⼰的Nexus 第三⽅存储库中的名称给了原来的罐⼦.
这个插件从我的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中,我有jfxrt.jar(Java FX的⼀部分).这个还包含⼀个netscape.javascript.JSObject对象(以及⼀个
netscape.javascript.JSException对象).另⼀⽅⾯,它不包含netscape.javascript.JSUtil对象.因此,Maven从JDK库中获取JSObject和JSException,以及从我⾃⼰的java-plugin依赖项中获取的其他类.
jdk怎么使用
当然两个班级都不⼀样.当然现在我得到了编译错误,因为java-plugin依赖包含JSObject类中的’getWindow’⽅法,⽽JDK库却没有.
理想的情况是从Maven中排除jfxrt.jar,但我完全不知道如何做到这⼀点.任何其他解决⽅案也会这样做,只要我能⽤Maven构建这个解决⽅案.注意:如果可能的话,我宁愿不想在Java中使⽤“认可”机制,因为这需要⼀遍⼜⼀遍地将这个库上传到⼏个不同的服务器,并且会导致部署的⼤量延迟(因为我们总是需要将⽂件发送给我们的⽀持团队进⾏另⼀次上传).
谢谢!
编辑
所以,我的插件依赖是JDK中的东西 – 甚⾄更好!我不需要我的java-plugin,我已经⽤我的JDK⾃动包含了plugin.jar(它在我的
${java.home} /lib/plugin.jar中).
现在我有这种情况:
如您所见,jfxrt.jar⾸先出现在plugin.jar之前.我可以看到为什么Maven,或者更普遍的Java,⼀旦到第⼀个
netscape.javascript.JSObject(在jfxrt.jar中)就停⽌查.但是我真的需要它来加载第⼆个JSObject类(不幸的是它恰好在同⼀个包中并且具有相同的名称).我该怎么办呢?当我没有使⽤Maven时,为什么这在Eclipse中没有魅⼒,为什么它不能与Intelliven⼀起使⽤?
提前致谢!
最佳答案 好的,所以我明⽩了.显然,这更像是⼀个IntelliJ问题,⽽不是类路径问题.
因此,IntelliJ会⾃动将完整的JDK(包括/ jre / lib中的所有jar)添加到类路径中 – ⾸先,在所有Maven依赖项之前.所以这导致我的项⽬变得奇怪:我在jfxrt.jar,plugin.jar和我的Maven插件中有⼀个netscape.javascript.JSObject(这些jar按此顺序添加).到的第⼀个JSObject是jfxrt.jar中的那个,导致了这个问题.
它在Eclipse中⼯作,我可以改变类路径顺序,并在JDK之前添加了我的Maven插件 – 所以顺序变成了java-plugin.jar(第⼀个,正确的JSObject类),jfxrt.jar,plugin.jar.
当我使⽤较旧的JDK时它会⼯作 – 这个jfxrt.jar只在JDK7中添加.
它适⽤于Jenkins,如果我还有来⾃Maven的java-plugin.jar,因为Jenkins不会⾃动添加JDK库(只有核⼼).这就是我清除它的⽅式:
>我删除了⾃⼰的java.plugin.jar,并将其替换为对plugin.jar的依赖.
com.sun.jdk
plugin
${version.java-plugin}
jar
system
${java.home}/lib/plugin.jar
>我仍然遇到IntelliJ中的问题,但是从IntelliJ本⾝导⼊的JDK库中删除了jfxrt.jar – 这确实改变了.iml⽂件,但当然不是任何可⽤于Jenkins的东西. (您可以通过右键单击项⽬浏览器中的外部库>< 1.7>⽂件夹,然后单击打开库设置)来编辑这些设置.
>⼀旦jfxrt.jar被删除,⼀切正常.我推断这不会改变jenkins的任何东西,但另⼀⽅⾯,jenkins甚⾄可能不存在问题.所以我只是尝试将我的代码提交给SVN,以便在Jenkins上构建它.
可悲的是,它现在也适⽤于jenkins.我尝试并删除了对plugin.jar的依赖,然后我在Jenkins上得到了经典的“不到符号”编译错误 – ⽽我在IntelliJ中没有得到错误,因为在类路径上⾃动导⼊了JDK.
简⽽⾔之:通过在IntelliJ中编辑我的项⽬设置,我让它在本地⼯作,只需信任Maven,我就让它以Jenkins的⽅式⼯作.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。