다른 빌드 프로필에 대한 다른 종속성


115

다른 프로필에 대해 maven pom.xml 파일에 다른 종속성 집합을 가질 수 있습니까?

예 :

mvn -P debug
mvn -P release

동일한 클래스 이름과 동일한 인터페이스의 다른 구현을 가진 하나의 프로필에서 다른 종속성 jar 파일을 선택하고 싶습니다.


다른 웹 서버를 대상으로 할 때 사용할 수 있습니다. 예를 들어, war 파일에 포함해서는 안되는 JAXB와 같은 libs를 제공하는 JavaEE 5 서버용으로 빌드하는 경우와 JAXB jar를 포함해야하는 JavaEE 1.4 서버용으로 빌드하는 경우입니다.
Leonel

답변:


174

이에 대한 Maven 문서 를 인용하려면 :

프로필 요소에는 선택적 활성화 (프로필 트리거)와 해당 프로필이 활성화 된 경우 POM에 적용 할 변경 집합이 모두 포함됩니다. 예를 들어 테스트 환경 용으로 빌드 된 프로젝트는 최종 배포와 다른 데이터베이스를 가리킬 수 있습니다. 또는 사용 된 JDK 버전에 따라 다른 저장소에서 종속성을 가져올 수 있습니다. .

(강조는 내 꺼야)

release프로필 에 대한 종속성을 프로필 선언 자체에 넣고 debug.

<프로필>
    <프로필>
        <id> 디버그 </ id>
        …
        <종속성>
            <dependency>… </ dependency>
        </ 종속성>
        …
    </ 프로필>
    <프로필>
        <id> 출시 </ id>
        …
        <종속성>
            <dependency>… </ dependency>
        </ 종속성>
        …
    </ 프로필>
</ 프로필>

2
이 메서드는 편집 모드에서 코드가 해석되지 않게합니다. 디버그가 활성화되면 릴리스의 종속성 jar가 누락되고 코드가 오류가됩니다. 어떻게 해결합니까?
brucenan

6
릴리스 특정 종속성의 범위를 종속성 계층 구조에서 '제공됨'으로 설정하고 릴리스 프로필 섹션에서 범위를 '컴파일'로 재설정 할 수 있습니다. 따라서 종속성은 컴파일에 사용할 수 있지만 '디버그'프로필에 대한 최종 전쟁에서는 사용할 수 없습니다.
uday

@uday 당신이 그 접근 방식을 보여주는 대답을 넣으면 내가 그것을 upvote하고 싶습니다
javadba

IMHO 프로필은 적어도 종속성에 대해 쓸모가 없습니다. IDE는 오류를 제공하고 종속성 해결을 중지하며 응용 프로그램이 결국 작동하지 않습니다. 나는 더 많은 것을 기대하고 있었다.
Ares

6

groupId, artifactId는 속성으로 프로필에서 토큰 화되어야하며 종속성을 일반 섹션으로 이동할 수 있습니다.


2
이것은 하나의 종속성이있는 경우에만 해당됩니다. 디버그와 릴리스간에 종속성 수가 다르면 토큰 화가 작동하지 않습니다. 그 문제에 대해서는 프로필 섹션에서 deps를 토큰 화하고 명시 적으로 정의하지 않는 것이 좋습니다.
Marcel Overdijk 2013

다른 특정 프로필 종속성과 함께 기본 프로필 종속성이 여전히 포함되어 있기 때문에 다른 대답은 나를 위해 작동하지 않았습니다. 귀하의 답변은 잘 작동했습니다.
Vlad Mihalcea

@Vlad POM의 본문에서 종속성을 제거 했습니까? 그렇지 않으면 두 번 받게됩니다. ( 하나의 프로필이 항상 활성화되어 있는지 확인하는 방법 은 stackoverflow.com/q/24855678/6944068을 참조하십시오 .)
toolforger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.