답변:
로부터 메이븐 문서 :
엮다
지정되지 않은 경우 사용되는 기본 범위입니다. 컴파일 종속성은 프로젝트의 모든 클래스 경로에서 사용할 수 있습니다. 또한 이러한 종속성은 종속 프로젝트로 전파됩니다.
제공
이것은 컴파일과 비슷하지만 JDK 또는 컨테이너가 런타임에 종속성을 제공 할 것으로 예상 함을 나타냅니다. 예를 들어, Java Enterprise Edition 용 웹 애플리케이션을 빌드 할 때 웹 컨테이너가 해당 클래스를 제공하므로 서블릿 API 및 관련 Java EE API에 대한 종속성을 제공 범위로 설정합니다. 이 범위는 컴파일 및 테스트 클래스 경로에서만 사용할 수 있으며 전이되지 않습니다.
요약 :
compile
있고 범위가 아닌 경우 전이 종속성이 발생합니다 provided
.
컴파일은 앱을 컴파일하고 실행하기 위해 JAR이 필요하다는 것을 의미합니다. 예를 들어 웹 응용 프로그램의 경우 JAR은 WEB-INF / lib 디렉토리에 배치됩니다.
제공은 컴파일을 위해 JAR이 필요하다는 것을 의미하지만 런타임에 환경에서 제공하는 JAR이 이미 있으므로 앱과 함께 패키지화하지 않아도됩니다. 웹 앱의 경우 JAR 파일이 WEB-INF / lib 디렉토리에 배치되지 않습니다.
웹 앱의 경우 앱 서버가 이미 JAR (또는 해당 기능)을 제공하는 경우 "제공됨"을 사용하고 그렇지 않으면 "컴파일"을 사용하십시오.
mvn exec:java
은 실행될 때 클래스 경로에 추가되지 않지만 컴파일 된 종속성은 추가됩니다.
모든 종속 항목 (일반적인 xxxx-all.jar)으로 단일 JAR 파일을 생성하려는 경우이 범위 내의 클래스는 결과 JAR에 패키지되지 않으므로 범위가 중요합니다.
자세한 내용은 maven-assembly-plugin을 참조하십시오.
maven-assembly-plugin
, 가장 많이 투표 된 답변에 대해서는 언급하지 않을 것입니다.
jar 파일의 경우, maven-jar-plugin 구성에서 addClassPath가 true로 설정되어 있으면 jar에 포함 된 MANIFEST.MF 파일에 나열된 클래스 경로에 차이가 있습니다. '컴파일'종속성은 매니페스트에 표시되며 '제공된'종속성은 표시되지 않습니다.
내 애완 동물 친구 중 하나는이 두 단어가 동일한 시제를 가져야한다는 것입니다. 컴파일 및 제공 또는 컴파일 및 제공
JAR packaging
맥락 에서 범위의 차이에 대해 생각 합니다. Maven Doc은 그것에 대해 언급하지 않았습니다. 나는 잠시 동안 메이븐을 사용하지만, 나는 이미 그것에 대해 자신을 물어 단지했습니다 :)이 글은 것 같다 그래서JAR packaging
문맥의 차이가없는compile
및provided
(종속 전환 제외). 내가 맞아?