Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven:从JDK中排除jar_Java_Eclipse_Maven_Jar - Fatal编程技术网

Java maven:从JDK中排除jar

Java maven:从JDK中排除jar,java,eclipse,maven,jar,Java,Eclipse,Maven,Jar,所以,我已经找了好几个小时了,我完全撞上了这堵砖墙 我的问题很简单:我有一个(相当大的)项目,我想用Maven构建它(这样我就可以稍微自动化一下)。到目前为止,除了一个主要问题外,一切正常 我有一个称为“java插件”的依赖项-我不知道确切的来源或作者,但它在我的依赖项的依赖项中-我将它添加到我们自己的Nexus第三方存储库中,并使用原始jar的名称 从我的Nexus添加此插件没有任何问题,但它具有以下结构: - netscape -- javascript JSExce

所以,我已经找了好几个小时了,我完全撞上了这堵砖墙

我的问题很简单:我有一个(相当大的)项目,我想用Maven构建它(这样我就可以稍微自动化一下)。到目前为止,除了一个主要问题外,一切正常

我有一个称为“java插件”的依赖项-我不知道确切的来源或作者,但它在我的依赖项的依赖项中-我将它添加到我们自己的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作为类路径上的“最后一个”JDK。现在是Maven,显然Maven将JDK放在第一位。在我的JDK中,我有
jfxrt.jar
(JavaFX的一部分)。这个还包含一个
netscape.javascript.JSObject
对象(以及一个
netscape.javascript.JSException
对象)。另一方面,它不包含
netscape.javascript.JSUtil
对象。因此,Maven从JDK库中选择了
JSObject
JSException
,并从我自己的java插件依赖项中选择了其他类

当然,这两门课是不一样的。当然,现在我得到了编译错误,因为java插件依赖项在
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类(不幸的是,它恰好位于同一个包中,并且具有相同的名称)。我该怎么做?当我没有使用Maven时,为什么它在Eclipse中没有魅力,为什么它不能在IntelliJ中与Maven一起工作


提前谢谢

好吧,我想出来了。显然,这是一个IntelliJ问题,而不是类路径问题

因此IntelliJ自动将完整的JDK(包括/jre/lib中的所有JAR)添加到类路径中-首先,在所有Maven依赖项之前。因此,这导致我的项目变得很奇怪:我在
jfxrt.jar
中、在
plugin.jar
中以及在我的Maven插件中都有一个
netscape.javascript.JSObject
(这些jar是按此顺序添加的)。找到的第一个JSObject是
jfxrt.jar
中的JSObject,这导致了问题

它在Eclipse中工作,我可以改变类路径顺序,并在JDK之前添加了我的Maven插件-因此顺序变成
java plugin.jar
(第一个,正确的JSObject类),
jfxrt.jar
plugin.jar

<dependency>
    <groupId>com.sun.jdk</groupId>
    <artifactId>plugin</artifactId>
    <version>${version.java-plugin}</version>
    <type>jar</type>
    <scope>system</scope>
    <systemPath>${java.home}/lib/plugin.jar</systemPath>
</dependency>
当我使用一个旧的JDK时,它就可以工作了——这个
jfxrt.jar
只是在JDK7中添加的

如果我仍然拥有Maven提供的
java plugin.jar
,它在Jenkins上可以工作,因为Jenkins不会自动添加JDK库(只添加核心)。我就是这样澄清的:

  • 我删除了自己的
    java.plugin.jar
    ,取而代之的是对
    plugin.jar
    的依赖

    <dependency>
        <groupId>com.sun.jdk</groupId>
        <artifactId>plugin</artifactId>
        <version>${version.java-plugin}</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${java.home}/lib/plugin.jar</systemPath>
    </dependency>
    
    
    com.sun.jdk
    插件
    ${version.java plugin}
    罐子
    系统
    ${java.home}/lib/plugin.jar
    
  • 我在IntelliJ中仍然存在问题,但是我从IntelliJ中导入的JDK库中删除了
    jfxrt.jar
    ,这确实改变了
    .iml
    文件,但当然对Jenkins没有任何用处。(您可以通过右键单击项目浏览器中的External Libraries><1.7>文件夹,然后单击打开库设置来编辑这些设置

  • 一旦
    jfxrt.jar
    被删除,一切都正常了。我推断这不会改变Jenkins的任何事情,但另一方面,Jenkins可能根本不存在这个问题。所以我只是尝试将我的代码提交给SVN,在Jenkins上构建它
神奇的是,它现在在詹金斯身上也起作用了。我尝试并删除了对
plugin.jar
的依赖,然后在Jenkins上出现了经典的“找不到符号”编译错误,而在IntelliJ中没有出现该错误,因为在类路径上自动导入了JDK


长话短说:通过在IntelliJ中编辑我的项目设置,我让它在本地工作,通过信任Maven,我让它在Jenkins上工作,这是应该的。

看看是否可以为您工作(我不知道这些,我只是找到了它们)。不,它们没有帮助,但我认为这是IntelliJ的主要问题,而不是Maven的问题。在这件事上损失了几个小时。。。谢谢