当前位置: 首页 > 面试题库 >

为什么Maven依赖项的顺序很重要?

元叶秋
2023-03-14
问题内容

我认为Maven依赖关系的顺序之前无关紧要,并认为这是它的一个优点。这是我以前pom.xml的依赖项:

<dependencies>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.19</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <version>2.19</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>2.19</version>
    </dependency>

</dependencies>

它运作良好,今天我要把对弹簧的依赖移到最底层,以便与那些球衣相关的东西可以在一起。但是后来我再也无法正常工作了,我的码头抱怨道:

[ERROR] Failed to execute goal org.eclipse.jetty:jetty-maven-plugin:9.3.0.M1:run (default-cli) on project mtest: Execution default-cli of goal org.eclipse.jetty:jetty-maven-plugin:9.3.0.M1:run failed: A required class was missing while executing org.eclipse.jetty:jetty-maven-plugin:9.3.0.M1:run: org/apache/commons/logging/LogFactory

那真的很令人困惑,所以我是否需要考虑依赖顺序?我怎么知道正确的顺序?


问题答案:

依赖关系的顺序确实很重要,因为从2.0.9版开始,Maven如何解决传递依赖关系。文档摘录:

(…)这确定遇到工件的多个版本时将使用哪个版本的依赖项。(…)你始终可以通过在项目的POM中明确声明版本来保证版本。(…)自Maven 2.0.9起,声明中的顺序才是最重要的:第一个声明获胜。



 类似资料:
  • 在基准测试时,我测量到的吞吐量比我计算的低得多,我将其缩小到LZCNT指令(它也发生在TZCNT中),如以下基准测试所示: 和: 我是在4770K上运行的,所以LZCNT和TZCNT不是作为BSR/BSF执行的。 这是怎么回事?

  • 这个问题将澄清什么是传递依赖,以及它在Maven中如何在非常高的级别上工作。 我的定义是:在依赖树中,比如-- 若C在B中有范围编译,那个么将B声明为A的依赖项就足以用Maven构建A。但是,如果C在B中提供了作用域,那么当Maven构建A时,除非A在其依赖项中声明C,否则该构建不会根据C自动编译A。 这是正确的吗?

  • 我理解,不可能用有限的位数来表示所有数字的任意精度,对浮点数进行天真的比较是不可取的。但我想,如果我把许多数字加在一起,我添加它们的**顺序**并不重要。 为了测试这个预测,我创建了一个随机数向量并计算它们的和,然后对向量排序并再次计算和。通常,这两个总数不匹配!这是我的代码(包含在下面)的一个问题,是浮点算法的一个缺点,还是可以通过切换编译器等来解决的问题。?

  • 我必须用一些代码来回答这个问题: 假设我编写了以下方法规范: 您正在为一个将使用此方法的数据库程序编写代码,并且希望专门处理每个程序。try/catch子句应该是什么样的 您可以对catch子句内容使用no-ops——空块{}<我们只对这里语句的语法和结构感兴趣。 我回答说: 出于这个原因,他没有接受这个答案: “你的catch子句顺序不对。你能解释一下为什么顺序很重要吗?” 他的回答正确吗?

  • 我想知道为什么我的简单spring boot项目不再有效。它基本上直接来自spring示例,其中一个控制器说hello world。我使用的是spring boot starter jetty和spring boot v1.1.10(也尝试了1.2.0)。我有一些使用嵌入式solr的单元测试,所以solr核心被标记为<代码> 我认为测试范围的依赖关系不应该干扰编译范围的依赖关系,并且“仅适用于测试