2010-07-07 8 views
2

특별한 프로파일이 활성화되어 있다면 maven compile 동안 Java 소스 파일을 교체해야합니다. 표준 src/main/java/의 파일을 제외하고 src/main/java2/과 같은 다른 소스 디렉토리의 파일을 포함하는 것으로 생각했습니다. maven에서 소스 파일 바꾸기

그러나 파일이 ...

공지 된 작업 방법을 같은 이름을 가지고 있고이 승리하고 다른 디렉토리에서 파일이 포함되지 않을됩니다 항상 제외 포장해야하기 때문에 그렇게하는

?

답변

5

의 사용을 찾을 수 있습니다. compile 뒤에 원래 원본 파일을 복원하십시오. 뭐 그런 (프로파일에 그것을 넣어) :

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
    <execution> 
     <id>replace-source-file</id> 
     <phase>process-sources</phase> 
     <configuration> 
     <tasks> 
      <move file="src/main/java/com/stackoverflow/App.java" tofile="src/main/java/com/stackoverflow/App.java.moved"/> 
      <copy file="src/main/java2/com/stackoverflow/App.java" todir="src/main/java/com/stackoverflow/"/> 
     </tasks> 
     </configuration> 
     <goals> 
     <goal>run</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>restore-source-file</id> 
     <phase>compile</phase> 
     <configuration> 
     <tasks> 
      <move file="src/main/java/com/stackoverflow/App.java.moved" tofile="src/main/java/com/stackoverflow/App.java"/> 
     </tasks> 
     </configuration> 
     <goals> 
     <goal>run</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

업데이트 : 주석의 OP에 의해 언급 한 바와 같이,이 방법의 주요 단점이있다. 컴파일 오류가있는 경우 잘못된 소스 파일 (및 *.java.moved 파일)은 src/main/java 디렉토리에 있습니다. 이것은 문제입니다.

더 깨끗한 대안은 전용 모듈에서 소스의 두 버전을 모두 이동하고 프로필에 따라 하나 또는 다른 모듈을 종속성으로 선언하는 것입니다 (보통 아티팩트는 기본적으로 활성화 된 프로필에 포함됩니다). 나는 심지어 컴파일러 제외를 망치지 않을 것이다. 이것은 효과적이고 깨끗합니다.

+0

고맙습니다, 그게 큰 함정을 가지고 있습니다 : 컴파일 오류가 있다면 잘못된 소스 파일 (그리고 * .java .moved 파일)은 src/main/java 디렉토리에 있습니다. – Marko

+0

@ user385480 Arghhh, 실제로, 그것에 대해 생각하지 않았다. 내 대답을 업데이트 할게. –

1

가능한 한 솔루션은 컴파일 단계를 실행하기 전에 /target/temp/src과 같은 임시 디렉토리에 실제로 필요한 소스 파일을 복사하는 것입니다. 해당 디렉토리 만 원본 디렉토리로 포함하십시오.

+0

나는 이것과 비슷한 것을 이미 생각했지만 이클립스 프로젝트의 성질을 깨뜨릴 것이다. – Marko

+0

그럴 경우 올바른 길을 가고 있는지 궁금하다. 서로 다른 소스 파일을 별개의 메이븐 프로젝트로 옮겨서 사용자 프로파일을 기반으로 서로 다른 의존성을 부여 할 수있는 이유는 무엇입니까? –

0

Maven 필터 옵션을 사용하십시오. 나는 "원래"소스 파일의 이름을 변경하고 compile 단계 이전 src/main/javasrc/main/java2에서 "특별한"소스 파일을 복사 할 Maven Antrun Plugin 사용하는 것이 다음 링크를 Maven Filter

+0

죄송하지만, 문서 (귀하의 링크)를 읽으면서 나는 필터링이 어떻게 여기 저를 도울 수 있는지 보지 못했습니다 ... – Marko