복붙노트

[SPRING] Maven 종속성의 순서가 중요한 이유는 무엇입니까?

SPRING

Maven 종속성의 순서가 중요한 이유는 무엇입니까?

나는 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

정말 혼란 스럽기 때문에 종속성 순서에 관심을 가져야합니까? 올바른 순서를 어떻게 알 수 있습니까?

해결법

  1. ==============================

    1.의존성의 순서는 버전 2.0.9부터 Maven이 전이 의존성을 해결하는 방법 때문에 중요합니다. 문서에서 발췌 :

    의존성의 순서는 버전 2.0.9부터 Maven이 전이 의존성을 해결하는 방법 때문에 중요합니다. 문서에서 발췌 :

  2. ==============================

    2.다른 답변 (선언 순서가 Maven의 종속성 중재에 영향을 준다는 내용)을 확장하기 위해 사용할 수있는 몇 가지 도구가 있습니다.

    다른 답변 (선언 순서가 Maven의 종속성 중재에 영향을 준다는 내용)을 확장하기 위해 사용할 수있는 몇 가지 도구가 있습니다.

    나는 당신의 상황에 대해 많이 알지 못하지만 컴파일 / 런타임시 하나 이상의 항아리가 잘못된 버전으로 출시되는 경우가 종종 있습니다. 해당 라이브러리의 자신의 버전을 선언하거나 를 사용하여 버전을 잠그는 것은 여기에있는 옵션입니다.

    이제 다른 질문에 대답하십시오 - 종속성을 선언 할 때 올바른 순서가 무엇인지 어떻게 알 수 있습니까?

    내 제안 - 올바른 선언 순서는 원하는 종속성의 버전을 원하는 순서대로 가져 오는 순서입니다. 위의 도구를 사용하여 종속성을 확인하고 필요한 경우 선언 된 순서를 미세 조정하십시오.

    대부분의 jar에는 분리 된 이름의 클래스가 포함되어 있으므로 jar가 클래스 경로에 나타나는 정확한 순서는 대개 중요하지 않습니다. 내가 주목 한 유일한 예외는 SLF4J의 일부 항아리가 의도적으로 대체하려는 다른 로거 라이브러리의 클래스를 섀도 잉하는 것입니다.

  3. from https://stackoverflow.com/questions/31740785/why-order-of-maven-dependencies-matter by cc-by-sa and MIT license