메이븐 의존성의 순서가 왜 중요합니까?
나는 예전에는 메이븐 종속의 순서가 중요하지 않다고 생각했고 이것을 증거로 간주했습니다.그리고 이것은 내 오래된 것입니다.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부터 트랜지티브 종속성을 해결하는 방법 때문에 종속성 순서가 중요합니다.설명서에서 발췌한 내용:
(...) 이것은 아티팩트의 여러 버전이 발생할 때 사용할 종속성 버전을 결정합니다. (...) 프로젝트의 POM에 명시적으로 선언하여 항상 버전을 보장할 수 있습니다. (...) 메이븐 2.0.9는 선언의 순서이기 때문에 첫 번째 선언이 승리합니다.
다른 답변(선언 순서가 메이븐의 전이적 종속성에 대한 종속성 중재에 영향을 미친다는 것)을 확장하기 위해 사용할 수 있는 몇 가지 도구가 있습니다.
mvn dependency:tree [-Dscope=[runtime|test]]
선택한 범위에 사용할 수 있는 종속성이 표시됩니다.자세한 내용은 여기를 참조하십시오.mvn dependency:build-classpath
클래스 경로에서 사용할 수 있는 종속성 순서를 제공합니다(둘 이상의 클래스 경로 항목이 동일한 클래스일 경우 이전 항목이 승리함).자세한 내용은 여기를 참조하십시오.
당신의 상황에 대해서는 잘 모르지만, 컴파일/런타임에 잘못된 버전의 1개 이상의 병이 생기는 경우가 많습니다.해당 라이브러리의 자체 버전 선언 또는 버전 잠금<dependencyManagement>
옵션입니다.
이제 당신의 다른 질문에 답하겠습니다. 종속성을 선언할 때 올바른 순서가 무엇인지 어떻게 알 수 있습니까?
제 제안입니다. 올바른 선언 순서는 원하는 종속성 버전을 원하는 순서대로 제공하는 것입니다.위의 도구를 사용하여 종속성을 확인하고 필요한 경우 선언된 순서를 조정합니다.
대부분의 병에는 이름이 구분되지 않는 클래스가 포함되어 있으므로 클래스 경로에 병이 나타나는 정확한 순서는 일반적으로 그다지 중요하지 않습니다.제가 주목한 유일한 예외는 SLF4J의 일부 jars로, 교체하려는 다른 로거 라이브러리의 클래스를 의도적으로 음영 처리합니다.
언급URL : https://stackoverflow.com/questions/31740785/why-order-of-maven-dependencies-matter
'programing' 카테고리의 다른 글
Ubuntu Server의 Apache 2.4.6: 서버 구성(PHP FPM)에 의해 클라이언트가 거부됨 [PHP 파일 로드 중] (0) | 2023.08.05 |
---|---|
응답 XML은 항상 null입니다. (0) | 2023.07.31 |
IDLE 대화형 셸에서 파이썬 스크립트를 실행하는 방법은 무엇입니까? (0) | 2023.07.31 |
@Inspectable with enum? (0) | 2023.07.31 |
하나의 데이터베이스에만 파일 허용 (0) | 2023.07.31 |