Maven : 명령 줄에서 대상 디렉터리 경로를 변경하는 방법은 무엇입니까?


82

Maven : 명령 줄에서 대상 디렉터리 경로를 변경하는 방법은 무엇입니까?

(경우에 따라 다른 대상 디렉토리를 사용하고 싶습니다)



2
간단한 대답 : Eclipse와 같은 IDE가 target/.
john sullivan

내가 찾은 또 다른 사용 사례 는 소스 트리에 디렉토리를 src/it/my-integration-test-project/pom.xml만들지 않고 명령 줄에서 와 같이 통합 테스트를 빌드 target하는 것입니다. 통합 테스트가 포함 된 프로젝트의 확인 단계의 일부로 실행될 때 복사됩니다.
Mike Samuel

1
이것이 귀하의 질문에 대답합니까? Maven으로 트리 외부 빌드. 가능할까요?
030

답변:


93

프로필을 사용해야합니다.

<profiles>
    <profile>
        <id>otherOutputDir</id>
        <build>
            <directory>yourDirectory</directory>
        </build>
    </profile>
</profiles>

그리고 프로필로 maven을 시작하십시오.

mvn compile -PotherOutputDir

명령 줄에서 디렉토리를 정의하려면 다음과 같이 할 수 있습니다 ( 전혀 권장하지 않음 ).

<properties>
    <buildDirectory>${project.basedir}/target</buildDirectory>
</properties>

<build>
    <directory>${buildDirectory}</directory>
</build>

그리고 다음과 같이 컴파일하십시오.

mvn compile -DbuildDirectory=test

사용하여 대상 디렉토리를 변경할 수 없기 때문입니다. -Dproject.build.directory


1
대단히 감사합니다. 두 번째 솔루션이 권장되지 않는 이유는 무엇입니까?
Igor Mukhin

1
@iimuhin, 첫 번째 솔루션은 maven 구성에서 제공하는 가능성을 올바르게 사용하는 것이고 두 번째 솔루션은 작동하도록 만드는 트릭입니다. 옵션 -Dproject.build.directory을 사용하려는 경우 사용 가능합니다. 이것은 -Dproject.build.directory문제에 대한 해결 방법입니다 . 또한 첫 번째 솔루션에서는 경로를 한 번만 지정하면 명령 줄을 시작할 때 디렉토리 이름에 오타를 입력 할 수 없으며 IDE 등에서 작업하더라도이 솔루션을 쉽게 사용할 수 있습니다.
Colin 허버트

8
프로필 솔루션의 문제점은 대상 디렉터리를 변경하는 많은 사용 사례가 사용자에 따라 다르며 (예 : 램 디스크에 빌드하려는 경우) pom에 속하지 않는다는 것입니다. 사용자 별 settings.xml의 프로필은 빌드 요소를 포함 할 수 없으므로 옵션이 아닙니다.
EricS 2014-07-15

이 답변이 마음에 들지만 settings.xml더 많은 이식성을 위해 명령 줄 대신 프로필을 활성화 할 수 있다는 것을 포함 할 수 있습니까?
Rogue 2015

1
기본 $ {project.basedir} / target을 가리키는 Eclipse를 방해하지 않고 대체 디렉토리의 명령 줄에서 빌드 할 수 있으므로 "권장되지 않는 솔루션"이 마음에 듭니다. 따라서 Eclipse에서 새로 고침 / 다시 빌드 할 때까지 기다리지 않고 동시에 명령 줄에서 빌드하는 동안 Eclipse에서 코드를 작성할 수 있습니다.
Francois Marot

28

Colin이 올바른 프로필을 사용해야합니다. 그러나 그의 대답은 프로필의 대상 디렉토리를 하드 코딩합니다. 대체 솔루션은 다음과 같은 프로필을 추가하는 것입니다.

    <profile>
        <id>alternateBuildDir</id>
        <activation>
            <property>
                <name>alt.build.dir</name>
            </property>
        </activation>
        <build>
            <directory>${alt.build.dir}</directory>
        </build>
    </profile>

이렇게하면 POM, 사용자 설정 또는 명령 줄에서 제공 할 수있는 alt.build.dir 속성이 제공하는 모든 것으로 빌드 디렉토리를 변경하는 효과가 있습니다. 속성이 없으면 일반 대상 디렉터리에서 컴파일이 수행됩니다.


n00b 질문에 대해 죄송합니다. 사용자 설정 파일에서 속성을 설정하는 적절한 방법은 무엇입니까? 설정 참조 에서 설정 파일에 설정된 속성이 설정 파일에 삽입되지 않는다는 것을 이해 합니다.
Michael Scheper 2013

또한 이것이 제공하는 이점은 무엇입니까? 나는 아마도 뭔가를 놓치고 있지만 OP의 'cases'가 명령 줄에 지정되어 있다고 가정하면 매개 변수가 다른 속성 -Dalt.build.dir=~/mytarget에 사용하는 것과 동일 하게 만들지 -D않습니까?
Michael Scheper 2013

아, 여기있는 모든 사람들이 settings.xml이 아닌 POM에 프로필을 추가하는 것에 대해 이야기하고 있다는 것을 방금 깨달았습니다. 그것은 내 질문을 적어도 n00b만큼 m00t로 만들 것입니다. 미안합니다.
Michael Scheper 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.