예:
그림에서 API 라이브러리는 일부 라이브러리를 가져오지만 이러한 라이브러리도 다른 버전의 라이브러리 X에 의존하므로 종속성 충돌이 발생할 수 있습니다.
이 문제를 해결하는 방법
Maven 및 Gradle 라이브러리 관리 도구가 있기 전에는 Java 프로젝트를 개발했는데 프로젝트의 종속성 충돌을 해결하는 데 많은 시간이 걸렸습니다. Maven 및 Gradle 도구가 도입되었습니다. 문제를 해결했지만 ClassNotFoundException, MethodNotSupportedException, NoClassDefNotFound와 같은 문제가 계속 표시되는 경우가 많습니다. 많은 경우 개발자의 경험에 의존하여 수동으로 해결할 수도 있습니다. 문제 해결에 도움이 되는 개발 도구:
Eclipse/IntelliJ 개발 도구의 종속성 분석기
모든 종속성을 표시하고 개발자가 충돌하는 라이브러리를 찾는 데 도움을 줄 수 있습니다.
어떤 라이브러리에 문제를 일으키는 종속성이 포함되어 있는지 감지하면 종속성 관리 파일(pom.xml 또는 build.gradle)에서 다양한 버전의 종속성을 포함하는 모든 라이브러리를 제외해야 합니다.
maven-enforcer-plugin
Maven은 계약 준수 확인(또는 개발 환경 확인)을 위해 Maven-Enforcer-Plugin 플러그인을 제공합니다. 예를 들어 JDK 버전, Maven 버전, 개발 환경(Linux, Windows 등), 종속 jar 패키지 버전 등 플러그인을 사용하려면 pom에 도입하기만 하면 됩니다.
<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-enforcer-plugin</artifactid> <version>1.3.1</version> <executions> <execution> <id>enforce</id> <configuration> <rules> <dependencyconvergence></dependencyconvergence> </rules> </configuration> <goals> <goal>enforce</goal> </goals> </execution> </executions> </plugin>
mvn을 할 때 패키지를 정리하면 다음과 같이 충돌하는 jar 버전과 상위 pom을 콘솔에 인쇄합니다.
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce) @ uaf-uafei-provider --- [WARNING] Dependency convergence error for com.google.guava:guava:16.0 paths to dependency are: +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-sleuth:0.2.09-SNAPSHOT +-org.springframework.cloud:spring-cloud-starter-openfeign:2.1.5.RELEASE +-io.github.openfeign:feign-hystrix:10.4.0 +-com.netflix.archaius:archaius-core:0.7.6 +-com.google.guava:guava:16.0 and +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-apollo:0.2.09-SNAPSHOT +-com.google.inject:guice:4.1.0 +-com.google.guava:guava:19.0 [WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message: Failed while enforcing releasability the error(s) are [ Dependency convergence error for com.google.guava:guava:16.0 paths to dependency are: +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-sleuth:0.2.09-SNAPSHOT +-org.springframework.cloud:spring-cloud-starter-openfeign:2.1.5.RELEASE +-io.github.openfeign:feign-hystrix:10.4.0 +-com.netflix.archaius:archaius-core:0.7.6 +-com.google.guava:guava:16.0 and +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-apollo:0.2.09-SNAPSHOT +-com.google.inject:guice:4.1.0 +-com.google.guava:guava:19.0 ]
위 내용은 Java 프로젝트에서 순환 종속성을 피하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!