Program Tip

Maven에서 사용되지 않거나 선언되지 않은 종속성은 무엇입니까?

programtip 2020. 11. 28. 10:16
반응형

Maven에서 사용되지 않거나 선언되지 않은 종속성은 무엇입니까? 그들과 무엇을해야합니까?


Maven dependency:analyze이 내 프로젝트의 종속성에 대해 불평합니다. 사용되지 않는 것과 선언되지 않은 것을 어떻게 결정합니까? 어떻게해야합니까?

예:

$ mvn dependency:analyze 
...
[WARNING] Used undeclared dependencies found:
[WARNING]    org.slf4j:slf4j-api:jar:1.5.0:provided
[WARNING]    commons-logging:commons-logging:jar:1.1.1:compile
[WARNING]    commons-dbutils:commons-dbutils:jar:1.1-osgi:provided
[WARNING]    org.codehaus.jackson:jackson-core-asl:jar:1.6.1:compile

...
[WARNING] Unused declared dependencies found:
[WARNING]    commons-cli:commons-cli:jar:1.0:compile
[WARNING]    org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[WARNING]    org.apache.httpcomponents:httpclient:jar:4.0-alpha4:compile
[WARNING]    commons-collections:commons-collections:jar:3.2:provided
[WARNING]    javax.mail:mail:jar:1.4:provided

참고 : 이러한 종속성은 내 런타임 컨테이너에서 많이 사용되며 클래스 경로에 동일한 라이브러리가 다른 버전으로 두 번 사용되는 것을 방지하기 위해 제공된 것으로 선언했습니다.


Maven이 이것을 어떻게 결정하는지 확실하지 않습니다. 보고 된 모든 항목을 다룰 필요는 없지만이 정보는 적절하게 사용할 수 있습니다.

사용 된 선언되지 않은 종속성 은 필수이지만 프로젝트에서 종속성으로 명시 적으로 선언되지 않은 종속성입니다. 그러나 프로젝트에서 다른 종속성의 전 이적 종속성 덕분에 사용할 수 있습니다. 이러한 종속성을 명시 적으로 선언하는 것이 좋습니다. 또한 이러한 종속성의 버전을 제어 할 수 있습니다 (아마도 런타임에서 제공하는 버전과 일치).

에 관해서는 사용되지 않는 선언 의존성 , 그것을 제거하는 좋은 아이디어이다. 프로젝트에 불필요한 종속성을 추가하는 이유는 무엇입니까? 그러나 전이성은 어쨌든 런타임 버전과 충돌을 일으킬 수 있습니다. 이 경우 기본적으로 version.

그건 그렇고, 프로젝트 mvn dependency:tree종속성 트리제공하여 각 종속성이 프로젝트에 어떻게 적용되는지에 대한 더 나은 관점을 제공합니다.


대답 :

"사용되지 않는 것과 선언되지 않은 것을 어떻게 결정합니까?"

Maven은 원시 바이트 코드를 분석 하는 Object WebASM 프레임 워크를 사용합니다 . 모든 클래스를 살펴본 다음 이러한 참조가 참조하는 모든 클래스의 목록을 작성합니다. 그것이 방법입니다.

해야 할 일에 관해서는, 실제로 사용하지 않았다는 확신이 들지 않는 한 "사용되지 않고 선언 된 종속성"을 제거하지 않는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/4565740/what-are-unused-undeclared-dependencies-in-maven-what-to-do-with-them

반응형