2014-12-31 2 views
13

Maven 종속성을 테스트 런타임 (테스트 컴파일 제외) 클래스 경로로만 사용하는 것으로 선언하는 가장 좋은 방법은 무엇입니까? 이 테스트 컴파일에 필요한 아니에요 (만 테스트 런타임 클래스 패스에테스트 런타임으로 Maven 종속성 선언

는 특히, 나는 전형적인 컴파일 범위 의존의 slf4j-api (로깅 외관) 싶지만 slf4j-simple (단위 테스트에 적합한 베어 구현을) 할). 나는이 일을 봤는데 :

[WARNING] Unused declared dependencies found: 
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test 

나는 runtime을 사용할 수 없습니다

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <scope>test</scope> 
</dependency> 

그러나, 이것의 단점은 dependency:analyze 보고서 slf4j-simple가 컴파일에 필요한 아니에요 아마도 때문에, 미사용이다 왜냐하면 종속성을 전이 적으로 상속 받기를 원하지 않기 때문입니다 (예를 들어 하류 종속성이 대신 log4j 등을 사용할 수 있습니다). optional=true으로 runtime을 시도했지만 동일한 경고가 표시됩니다.

(나는 또한 종속성 플러그인 ignoreNonCompile을 설정할 수 있습니다,하지만 다른 잠재적 인 문제를 숨겨 매우 둔기처럼 보인다.)

+0

런타임시 기본 소스에 필요한 것은 무엇입니까? 'runtime' 범위 종속성에 대해 여전히 불평하지 않을까요? –

+0

일반적으로 전 이적 종속성은 선언 할 필요가 없습니다. 선택적 종속성 (일반적으로 다른 프레임 워크를 사용할 수있는 로깅과 같음)의 경우 절차가 옳습니다. 어쩌면 스코프 테스트를 추가 할 수 있습니다. –

+0

'런타임'종속성에 대해 (잘못하여, IMHO) 불평하기 때문에 범위만으로는 대답이 아닌 것처럼 보입니다. 내가 정말로 원하는 것은'test'와'runtime' (클래스 경로까지)의 교차 영역과 dependency plugin이 "unused"'runtime' 의존성에 대해 덜 바보처럼 행동하는 범위입니다. –

답변

7

정확하게 원하는 범위를 수행 할 수있는 범위가 없습니다. test이 가장 좋습니다.

test-runtime (Re: Need for a test-runtime scope?) 전에 범위가 요청되었으며 제안 된 해결 방법은 이미 발견 한 ignoreNonCompile 구성입니다.

dependency:analyze에는 이미 일부 제한 사항 ("some cases are not detected (constants, annotations with source-only retention, links in javadoc)")이 있습니다. 경고 할 수있는 test-scope 종속성이 오 탐지라고 받아 들여야 할 수 있습니다.

이 (당신 다음 다른 모듈에서 실행할, 더 slf4j 구현 종속성이없는 것 별도의 모듈로 테스트의 정의를 분할합니다. 나는 그것을 가치가있을 것입니다 생각하지 않습니다.)

+1

javadoc 문제의 경우 정규화 된 클래스 이름에 링크하고 javadoc 플러그인에 기본 링크 URL을 추가하고 프로젝트에 대한 종속성을 선언하지 않았습니다.이렇게하면 import 문과 실제로 필요하지 않은 종속성이 나열 될 수있는 잠재적 인 부정적인 문제가 발생하지 않습니다. –

4

받는다는에서 테스트 실행의 개념이 없습니다. 유일한 단점은 이러한 런타임 테스트 종속성을 사용하지 않는 것으로 식별하는 종속성 분석입니다. 그러나 테스트 종속성 만 있으므로이 프로젝트에 종속적 인 다른 프로젝트에 문제를 일으킬 수 없습니다.