【问题标题】:compilation fails inspite required entries in pom.xml (commons-lang3)尽管 pom.xml (commons-lang3) 中有必需的条目,但编译失败
【发布时间】:2018-11-11 05:24:23
【问题描述】:

概述

这可能是一个微不足道的问题,或者可能没有资格参加这里,但任何建议都会有所帮助。

当将依赖项添加到pom.xml 时,在将项目编译到 java jar 时出现一堆错误,而没有任何代码更改

步骤

  • 为项目克隆一个git repo并执行mvn clean compile

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 4.743 s
    [INFO] Finished at: 2018-05-31T22:21:04+00:00
    [INFO] Final Memory: 25M/389M
    [INFO] ------------------------------------------------------------------------
    
  • 在同一个项目MVN Ref的pom.xml中添加新的依赖项

    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-hive</artifactId>
        <version>1.1.1</version>
    </dependency>
    
  • 现在再次执行mvn clean compile

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project saavn-storm-lib: Compilation failure: Compilation failure:
    [ERROR] /home/user/backend/storm/storm_lib/src/main/java/com/storm/bolts/Helper.java:[167,57] unreported exception org.json.JSONException; must be caught or declared to be thrown
    
    .
    
    .
    
    .
    
    .
    

    多次出现 JSONException 相关的错误信息,后跟

    [ERROR] /home/user/backend/storm/storm_lib/src/main/java/com/storm/bolts/Helper.java:[132,58] cannot find symbol
    [ERROR] symbol:   method unescapeJson(java.lang.String)
    [ERROR] location: class org.apache.commons.lang3.StringEscapeUtils
    

更多信息

  • pom.xml 包含

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
    </dependency>
    
  • 相应的依赖也存在于本地

    ls -l ~/.m2/repository/org/apache/commons/commons-lang3/3.3.2/
    
    commons-lang3-3.3.2.jar
    commons-lang3-3.3.2.jar.sha1
    commons-lang3-3.3.2.pom
    commons-lang3-3.3.2.pom.sha1
    _remote.repositories
    
  • 此方法在后续版本中已弃用,但在此版本中非常普遍,并且到目前为止一直有效。

问题

  • 在没有修改代码的情况下,为什么一开始就没有显示它们,因为它们似乎已经存在?
  • JSONException相关的错误可以处理,但是为什么突然缺少一些依赖以及如何纠正呢?

【问题讨论】:

    标签: java maven dependencies


    【解决方案1】:

    两种最可能的情况:

    1. 在您添加该依赖项之前,已经存在对不同版本的 storm-hive 的依赖项。如果您回到工作状态(在添加依赖项之前)并调用 Maven 目标 dependency:list,您可能已经在列表中看到了 storm-hive

    2. dependency:list 中有一个不同的依赖项,它与storm-hive 共享限定类名。如果你的类路径中有不同的类同名,Java 只会选择其中一个,这可能会导致奇怪的错误。

    【讨论】:

    • 使用上面的指针,我搜索了一点,偶然发现了This。这有助于解除阻塞。但问题仍然是如何有效地识别导致问题的依赖关系?我在闲逛时使用了dependency : analysedependency : tree
    • 为什么需要排除项? “依赖导致问题”是什么意思?
    • 我检查了任何与storm-hive 冲突的东西,但没有找到任何东西。那么,由于这个特定条目而被拉出的其他一些包是否可能会造成我面临的问题?这就是我所说的导致问题的依赖项,但我的意思是包。
    • 而不是按照之前评论中的建议排除,只是将 storm-hive 依赖项放在顺序中的最后一个,同时在 pom.xml 中声明即可解决问题。
    • 可能依赖管理会是一个更好的解决方案
    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多