Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 如何检查jar文件依赖关系_Java_Maven - Fatal编程技术网

Java 如何检查jar文件依赖关系

Java 如何检查jar文件依赖关系,java,maven,Java,Maven,我来自.NET背景,这些天我需要做一些JAVA工作。有一件事我不太了解,那就是JAvA运行时是如何解析其jar依赖关系的。例如,我想使用javax.jcr进行一些节点添加。所以我知道我需要添加这两个依赖项,因为我需要使用javax.jcr.Node和org.apache.jackrabbit.commons.JcrUtils <dependency> <groupId>javax.jcr</groupId>

我来自.NET背景,这些天我需要做一些JAVA工作。有一件事我不太了解,那就是JAvA运行时是如何解析其jar依赖关系的。例如,我想使用javax.jcr进行一些节点添加。所以我知道我需要添加这两个依赖项,因为我需要使用javax.jcr.Node和org.apache.jackrabbit.commons.JcrUtils

      <dependency>
           <groupId>javax.jcr</groupId>
           <artifactId>jcr</artifactId>
           <version>2.0</version>
      </dependency>
      <dependency>
           <groupId>org.apache.jackrabbit</groupId>
           <artifactId>jackrabbit-jcr-commons</artifactId>
           <version>2.8.0</version>
      </dependency>
          </dependency>

javax.jcr
jcr
2
org.apache.jackrabbit
jackrabbit jcr commons
2.8.0
现在我通过了编译,但在运行时遇到了一个异常。然后有人告诉我再添加一个依赖项,解决了这个问题

         <dependency>
               <groupId>org.apache.jackrabbit</groupId>
               <artifactId>jackrabbit-jcr2dav</artifactId>
               <version>2.6.0</version>
          </dependency>

org.apache.jackrabbit
jackrabbit-jcr2dav
2.6.0

据我所知,jackrabbit jcr commons需要运行jackrabbit-jcr2dav。如果jar缺少依赖项,它如何通过编译?还有,我如何知道我错过了jcr common中的这个特定依赖项?这是一个一般性的问题,不必特定于java jcr。

Maven在编译时计算可传递依赖项,因此编译通过ok。这里的问题是,默认情况下,maven不会构建适当的
java-cp
命令行来启动具有所有依赖项(直接和可传递)的应用程序

有两种解决方案:

  • 调整Maven项目以构建一个“胖jar”——jar,它将包含所有依赖项中所需的所有类。请参见使用
    pom.xml
    snippet回答以下问题:。然后您可以通过java-cp myfatjar.jar my.app.MainClass启动
  • 对于具有多个结果工件(通常是不同的java程序)的多模块项目,有必要构建定制的
    assembly.xml
    ,它将告诉Maven如何打包工件以及要包含哪些依赖项。您需要在生成的包中提供某种脚本,该脚本将包含适当的
    java-cp…
    命令。据我所知,在编译/打包期间没有“官方”Maven插件来构建这样的脚本

  • 免费的Maven或多或少地解释了依赖项和程序集是如何工作的。

    Maven在编译时计算可传递的依赖项,因此编译通过了ok。这里的问题是,默认情况下,maven不会构建适当的
    java-cp
    命令行来启动具有所有依赖项(直接和可传递)的应用程序

    有两种解决方案:

  • 调整Maven项目以构建一个“胖jar”——jar,它将包含所有依赖项中所需的所有类。请参见使用
    pom.xml
    snippet回答以下问题:。然后您可以通过java-cp myfatjar.jar my.app.MainClass启动
  • 对于具有多个结果工件(通常是不同的java程序)的多模块项目,有必要构建定制的
    assembly.xml
    ,它将告诉Maven如何打包工件以及要包含哪些依赖项。您需要在生成的包中提供某种脚本,该脚本将包含适当的
    java-cp…
    命令。据我所知,在编译/打包期间没有“官方”Maven插件来构建这样的脚本
  • 有一个免费的Maven,它或多或少地解释了依赖项和程序集是如何工作的。

    如果我不得不猜测的话(不用花太多时间钻研这个特定项目的Maven层次结构),我相信您的问题是由以下事实造成的:
    jackrabbit jcr commons
    jackrabbit api
    具有可选依赖性。这意味着除非在POM中重新声明,否则不会自动获取该依赖项(及其依赖项)

    一般来说,可选的依赖项是一个项目中结构问题的创可贴解决方案。要引用有关主题()的maven文档,请执行以下操作:

    在不可能的情况下使用可选依赖项(例如 (无论什么原因)将项目拆分为子模块。这个想法是 某些依赖项仅用于中的某些功能 如果不使用该功能,则不需要该项目。 理想情况下,这样一个特性将被拆分为一个子模块,该子模块依赖于 在核心功能项目上…这个新的子项目 只有非可选的依赖项,因为如果您 决定使用子项目的功能

    然而,由于项目不能被分割(再次,无论如何 原因),这些依赖项被声明为可选的。如果用户想要 使用与可选依赖项相关的功能,他们必须 在他们自己的项目中重新声明该可选依赖项。这不是 这是处理这种情况的最明确的方法,但再次强调,两者都有 可选依赖项和依赖项排除是权宜之计 解决方案

    一般来说,探索依赖项的POM将揭示此类问题,尽管这一过程可能会非常痛苦。

    如果我不得不猜测(不必花费太多时间钻研此特定项目的Maven层次结构),我相信您的问题是由以下事实造成的:
    jackrabbit jcr commons
    jackrabbit api
    具有可选依赖性。这意味着除非在POM中重新声明,否则不会自动获取该依赖项(及其依赖项)

    一般来说,可选的依赖项是一个项目中结构问题的创可贴解决方案。要引用有关主题()的maven文档,请执行以下操作:

    在不可能的情况下使用可选依赖项(例如 (无论什么原因)将项目拆分为子模块。这个想法是 某些依赖项仅用于中的某些功能 如果不使用该功能,则不需要该项目。 理想情况下,这样一个功能将是