2013-07-08 3 views
9

나는 이클립스에서 Maven을 사용하여 의존성을 빌드하고 관리하는 Java 프로젝트를 작업 중이다. 프로젝트는 5 개의 Eclipse 프로젝트에 분산되어 있으며 그 중 하나가 상위 POM입니다. 나는 다른 팀이 구현 한 훨씬 더 복잡한 서버를 기반으로하는 서버 구현에 대해 작업하고 있습니다. 그래서 저는 기존의 코드와 POM 파일을 기반으로 작업을 진행했으며, 이제는 이클립스 프로젝트를 통해 POM에 많은 불필요한 종속성을 갖게되었습니다. 나는 이클립스 Maven 플러그인을 사용하여이 명령을 실행하면Eclipse에서 불필요한 Maven 종속성을 (안전하게) 제거하는 방법?

mvn dependency:analyze 

, 나는 선언하지 않는 "의 긴 목록을 얻을 것이다 :

는 상대적으로 내가 메이븐 초보자 해요,하지만이 명령을 잘 알고, 말하기, 의존성 "이 있지만 몇 가지를 제거하려고 할 때 내 프로그램이 때로는 신비한 방식으로 중단됩니다.

이 문제를 해결하기 위해 일반적으로 허용되는 모범 사례가 있습니까? 아니면 (아마도) 사용되지 않는 의존성을 하나씩 제거하는 일을 중단하고, 각각이 제거 된 후에도 아무 것도 손상되지 않도록해야합니까?

+0

코드를 제거한 후 종속성이 빠진 경우 신속하게 강조 표시되는 오류가 있습니까? – vikingsteve

+0

아니요, 이러한 종속성을 제거한 후 컴파일 시간 오류가 없습니다. 그것은이 상황에 대해 수수께끼 같은 것입니다. –

+0

컴파일 오류를 암시하지 않는 런타임 종속성을 가질 수 있습니다. 예를 들어, 런타임시 구성 파일을 사용하여 로깅 구현을 사용합니다. – YMomb

답변

1

Java -verbose:class 옵션을 켠 상태에서 코드를 실행 해 볼 수 있습니다. 이렇게하면 각 클래스가로드되는 위치 (어떤 jar 파일)를 출력하는지 알 수 있습니다. (참고 : 썬의 JRE에이 표준 출력에 기록됩니다, 나는 그것이 표준 오류에 기록됩니다 IBM의의 JRE에 생각합니다.) 다음은 출력의 예 : 프로그램의 로직의 대부분을만큼 당신이 실행으로

[Loaded junit.framework.AssertionFailedError from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar] 
[Loaded junit.framework.ComparisonFailure from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar] 
[Loaded org.jmock.core.SelfDescribing from file:/D:/Documents%20and%20Settings/mike/.m2/repository/jmock/jmock/1.2.0/jmock-1.2.0.jar] 
[Loaded org.apache.log4j.spi.Configurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar] 
[Loaded org.apache.log4j.xml.DOMConfigurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar] 

(필요한 클래스가로드되도록) verbose : 클래스 출력에 언급되지 않은 모든 jar가 maven 종속성으로 제거 될 수 있다고 가정 할 수 있습니다.

& 검색 결과를 verbose : class 출력으로 바꾸고, 예를 들어 csv로 변환 한 다음 스프레드 시트 프로그램으로 가져 와서 jar 파일을 정렬/그룹화 할 수 있습니다.

아직 수동 작업이 다소 편하지만, 적어도 시작 어딘가에 줄 것입니다!

+0

가장 고통스러운 해결책처럼 들립니다. 나는 그것을 시험해 볼 것이다, 고마워! –

0

인트로 스펙 션에서 서비스에 이르기까지 무엇이든 런타임에 중단 될 수 있다는 점을 감안할 때 일반적으로 모범 사례가 받아 들여지지는 않습니다. 단위 테스트는 도움이 될 수 있지만 좋은 범위가 아니면 보안에 대한 잘못된 인식을 줄 수 있습니다. 모든 패키지를 제거한 후에도 기능 테스트 (자동으로 수행되기를 바랍니다)를 확인해야합니다.

관련 문제