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


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.