메이븐
POM 레퍼런스 문서의 Directories 섹션을 보면 *Directory 경로는 프로파일에서 바꿀 수 없다고 나온다.
The set of directory elements live in the parent build element, which set various directory structures for the POM as a whole. Since they do not exist in profile builds, these cannot be altered by profiles.
그러니까 sourceDirectory, testSourceDirectory 엘리먼트는 profile 엘리먼트하위의 build에는 존재하지 않기 때문에 프로파일에서 변경이 불가하다는 것이다.
<build>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
...
</build>
</project>
과연 바꿀 수 없을까? 바꿀 수 있다!
parent build 엘리먼트에서 소스 디렉토리의 경로를 프로퍼티로 설정하고 프로파일에서 프로퍼티를 재정의하면 된다.
<properties>
<java.src.dir>src</java.src.dir>
<scripts.src.dir>scripts</scripts.src.dir>
<test.src.dir>test</test.src.dir>
<java.output.dir>web/WEB-INF/classes</java.output.dir>
<test.output.dir>bin/test</test.output.dir>
</properties>
<build>
<sourceDirectory>${java.src.dir}</sourceDirectory>
<scriptSourceDirectory>${scripts.src.dir}</scriptSourceDirectory>
<testSourceDirectory>${test.src.dir}</testSourceDirectory>
<outputDirectory>${java.output.dir}</outputDirectory>
<testOutputDirectory>${test.output.dir}</testOutputDirectory>
...
</build>
<profiles>
<profile>
... ...
<properties>
<java.src.dir>src2</java.src.dir>
<scripts.src.dir>scripts</scripts.src.dir>
<test.src.dir>test2</test.src.dir>
<java.output.dir>/weblogic/deploy/app/WEB-INF/classes</java.output.dir>
<test.output.dir>bin/test2</test.output.dir>
</properties>
</profile>
메이븐에서는 만약 profile별로 다른 소스 디렉토리 구조를 가져야한다면 별도의 프로젝트로 분리할 것을 권장하고 있다. 그 말이 맞는 것같다.