pom.xml의 <dependency>에서 <scope>는 무엇입니까?


179

http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html 문서를 보면 <scope>아래에서 태그 를 볼 수 있습니다<dependency>

그것은 무엇이며 어떻게 테스트 실행에 사용할 수 있습니까?


15
그것은 문서에서 모두 잘 설명되어 있습니다 : maven.apache.org/guides/introduction/…
guido

답변:


266

<scope>: 요소는 6 개 값을 취할 수 컴파일 , 제공 , 실행 , 테스트 , 시스템가져 오기를 .

이 범위는 종속성의 전이성을 제한하고 다양한 빌드 작업에 사용되는 클래스 경로에 영향을주기 위해 사용됩니다.

엮다

지정되지 않은 경우 사용되는 기본 범위입니다. 컴파일 종속성은 프로젝트의 모든 클래스 경로에서 사용할 수 있습니다. 또한 이러한 종속성은 종속 프로젝트로 전파됩니다.

제공

이것은 컴파일과 비슷하지만 JDK 또는 컨테이너가 런타임에 종속성을 제공 할 것으로 예상 함을 나타냅니다. 예를 들어, Java Enterprise Edition 용 웹 애플리케이션을 빌드 할 때 웹 컨테이너가 해당 클래스를 제공하므로 서블릿 API 및 관련 Java EE API에 대한 종속성을 제공 범위로 설정합니다. 이 범위는 컴파일 및 테스트 클래스 경로에서만 사용할 수 있으며 전이되지 않습니다.

실행 시간

이 범위는 종속성이 컴파일에 필요하지 않지만 실행에 필요함을 나타냅니다. 런타임 및 테스트 클래스 경로에 있지만 컴파일 클래스 경로에는 없습니다.

테스트

이 범위는 응용 프로그램을 정상적으로 사용하는 데 종속성이 필요하지 않으며 테스트 컴파일 및 실행 단계에서만 사용할 수 있음을 나타냅니다.

체계

이 범위는 명시 적으로 포함 된 JAR을 제공해야한다는 점을 제외하면 제공된 것과 유사합니다. 아티팩트는 항상 사용 가능하며 저장소에서 검색되지 않습니다.

가져 오기 (Maven 2.0.9 이상에서만 사용 가능)

이 범위는 섹션에서 pom 유형의 종속성에만 사용됩니다. 지정된 POM이 해당 POM 섹션의 종속성으로 대체되어야 함을 나타냅니다. 그것들이 대체되기 때문에, 수입 범위를 가진 의존성은 실제로 의존성의 전이성을 제한하는 데 참여하지 않습니다.

질문의 두 번째 부분에 대답하려면 :

테스트 실행에 어떻게 사용할 수 있습니까?

test범위에서는 테스트 단계에 대해서만 종속성을 사용할 수 있습니다.

자세한 내용은 설명서 를 읽으십시오 .


"test"를 사용하면 생성 된 .jar 파일로 끝나나요?
markthegrea

1
컴파일 및 런타임에 종속성이 필요한 경우 어떻게해야합니까?
Albin


12

6 가지 종속성 범위 :

  • 컴파일 : 기본 범위는, 클래스 경로가 모두 사용할 수 있습니다 src/mainsrc/test
  • 테스트 : 클래스 경로를 사용할 수 있습니다src/test
  • 제공 : 컴플리트와 유사하지만 런타임에 JDK 또는 컨테이너에서 제공
  • 런타임 : 컴파일에 필요하지 않으며 런타임 에만 필요
  • 시스템 : 클래스 경로를 로컬로 제공
  • import : 다른 POM 만로 가져올 <dependencyManagement/>수 있으며 Maven 2.0.9 이상에서만 사용 가능


4

범위 태그는 항상 클래스 경로 레벨에서 jar의 전이 종속성 및 가용성을 제한하는 데 사용됩니다. 범위를 제공하지 않으면 기본 범위가 작동합니다 (예 : Compile) .


11
컴파일은 앱을 컴파일하고 실행하기 위해 JAR이 필요하다는 것을 의미합니다. 예를 들어 웹 응용 프로그램의 경우 JAR은 WEB-INF / lib 디렉토리에 배치됩니다. 제공은 컴파일을 위해 JAR이 필요하다는 것을 의미하지만 런타임시 환경에서 제공하는 JAR이 이미 있으므로 앱과 함께 패키지화하지 않아도됩니다. 웹 앱의 경우 JAR 파일이 WEB-INF / lib 디렉토리에 배치되지 않습니다. 웹 앱의 경우 앱 서버가 이미 JAR (또는 기능)을 제공하는 경우 "제공됨"을 사용하고 그렇지 않으면 "컴파일"을 사용하십시오.
Mukesh

1
답변 안에
yhis

0

범위를 제공하지 않으면 기본 범위는 컴파일입니다. 확인하려면 이클립스 편집기의 유효 pom 탭으로 이동하면 컴파일로 표시됩니다.


영업 이익은 범위가 무엇인지 질문 입니다수행 하지 기본 범위가 무엇인지 발견.
Wouter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.