메이븐 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별로 다른 소스 디렉토리 구조를 가져야한다면 별도의 프로젝트로 분리할 것을 권장하고 있다. 그 말이 맞는 것같다.

Posted by 에코지오
,