2012-10-17 4 views
2

한 모듈이 소스 생성에만 사용되는 maven 다중 모듈 빌드를 정의했습니다. 컴파일, 테스트 또는 패키징을 수행하지 않으며 소스 파일 생성과 별도로 아티팩트를 생성하지 않습니다.maven 다중 모듈 빌드의 라이프 사이클 단계

멀티 모듈 빌드를 시작할 때 지정하는 단계에 관계없이 발전기 모듈에서 최대 generate-sources까지만 단계를 실행하는 방법을 찾지 못했습니다. 원하지 않는 단계를 건너 뛸 수있는 몇 가지 솔루션이 있지만 실제 옵션은 많지 않습니다. , 궁금 분들을 위해

나는 그것을 원하는 것 : 빌드는 티코와 화로 자리의 OAW 플러그인을 사용하고, 그래서 두 개의 별도의 치어 파일로 빌드를 분할과 함께 "을 실행하는 멀티 모듈 빌드 파일을 사용했다 ".

+0

질문에 답하는 경우, 나는 그런 식의 방법을 모르고 있습니다. 유일한 제안은 소스 생성을'generate-sources' 단계가 아니라'package','install' 또는'deploy' 단계 (당신이 선호하는 것)에 묶는 것일 수 있습니다. –

+0

정상적인 단계는 괜찮습니다. 대상 단계가 설치되거나 배포 된 경우라도 "생성 모듈"은 라이프 케일 단계 후에 중지해야합니다. 나중의 단계에서 다른 출력물이 필요하지 않습니다. –

+0

발전기 모듈에'pom' 패키징을 지정하는 것은 어떻습니까? 나는 왜 당신이 그것을 분할했는지 궁금해. 나는 코드 genearation을 위해 fornax oaw 플러그인을 사용했던 프로젝트에서 일하고있었습니다. 우리는 단지 자신의 프로파일에서'generate-sources' 단계에 바인딩했습니다. – SpaceTrucker

답변

1

필자가 이해하는 한, 이것은 Xtext를 사용하여 Maven 빌드에서 호출되는 코드 생성기를 만드는 것에 관한 것입니다. 프로젝트를 조금 더 나누어야한다고 생각합니다. 문법을 변경할 때만 생성기가 필요합니다. 따라서 생성기가 포함 된 독립 프로젝트 (모듈 아님)를 갖는 것이 좋습니다. 생성기를 빌드하여 Maven 저장소에 배포합니다. 정상적인 빌드에서는 fornax-oaw-m2 플러그인을 사용하여 지금하고있는 것처럼 generate-sources 단계에서 소스를 생성합니다. fornax-oaw-m2 플러그인에 대한 종속성으로 생성기를 포함하면됩니다.

편집 :
그래서 다시 멀티 모듈 프로젝트를 빌드 할 와서 : 난 단지 당신이 소스와 다른 아무것도 생성되는 자원을 포함하는 모듈이 있음을 시사한다. 다른 java 소스 코드는 자체 모듈에 포함되어야합니다.

  1. 당신이 소스와 설정 상대 경로를 적절하게
  2. 실행 포함해야 모듈의 발전기를 생성되는 자원을 포함하는 모듈에 발전기를 실행 : 그럼 난 발전기를 사용하기위한 두 가지 대안을 제안 할 수 있습니다 생성 된 소스를 포함하고 모듈을 리소스와 함께 종속성으로 포함하십시오 (리소스를 생성하기 전에 해당 종속성의 압축을 풀어야 할 수도 있음)

여전히 항상 generate-sources 단계에서 생성됩니다. 두 번째 대안에서는 다른 모듈 세트에 소스를 생성해야하는 경우 fornax-oaw-m2 플러그인의 구성이 중복됩니다. 그러나 저는 이것이 당신이 현재 구축하고있는 프로젝트를 변경하기 만하면 더 많은 방법이라고 생각합니다. 첫 번째 대안에서는 소스가 생성되는 모듈에서 소스 생성을 수행하는 모듈에 대한 종속성을 선언해야합니다. 이것은 조금 어색한 것 같습니다.

+0

발전기가 동일한 문제가 아니며 다른 Eclipse 플러그인 안에 있습니다. 내 프로젝트에는 특정 dsl 및 일반 Java 코드로 작성된 파일이 들어 있습니다. 그걸 명확히하지 못해 죄송합니다. 생성기를 만드는 것이 아니라 dsl 파일 (xtend 사용)을 기반으로 자바 소스를 생성하고 전체 내용을 컴파일하는 것입니다. –

+0

@Andreas_D 답변을 조정했습니다. 희망이 도움이됩니다. – SpaceTrucker

+0

나는 dsl과 java 파일을 별도의 Eclipse 프로젝트에 배포하고 후에 다른 프로젝트에서 대상 디렉토리를 정의하여 소스 파일을 수집하려고하지 않는다. 프로젝트는 라이브러리 (jar)를 빌드하는 데 필요한 모든 파일을 포함해야합니다. 생성기는 자바 소스를 생성하며, 컴파일, jar'd 및 설치/전개해야합니다. –

2

latest question을 본 후 해결책이 될 것 같아요.

모든 ../projectN/generate/pom.xml은 상위 POM을 부모로 갖고 있지만 특수한 generate-parent POM을 만들어 모든 단계를 건너 뛰는 것이 좋습니다.

최상위 수준에 generate-parent라는 별도의 폴더 만들기 :

<modules> 
    <module>../generate-parent/pom.xml</module> <!-- NEW FOLDER WITH POM --> 
    <module>../project1/generate/pom.xml</module> 
    <module>../project1/pom.xml</module> 
    <module>../project2/generate/pom.xml</module> 
    <module>../project2/pom.xml</module> 
    <!-- and many more projects with or without generate sub modules --> 
</modules> 

이 새로운 치어 평소와 같이 부모 치어를 상속하지만 몇 가지 추가 플러그인 관리를 추가합니다 :

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>your-group</groupId> 
     <artifactId>your-parent-pom-artifact-id</artifactId> 
     <version>your-parent-version</version> 
    </parent> 

    <artifactId>generate-parent</artifactId> 
    <packaging>pom</packaging> 

    <name>${project.artifactId}-${project.version}</name> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <artifactId>maven-resources-plugin</artifactId> 
        <version>2.4.3</version> 
        <executions> 
         <execution> 
          <id>default-resources</id> 
          <phase>none</phase> 
         </execution> 
         <execution> 
          <id>default-testResources</id> 
          <phase>none</phase> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.3.2</version> 
        <executions> 
         <execution> 
          <id>default-compile</id> 
          <phase>none</phase> 
         </execution> 
         <execution> 
          <id>default-testCompile</id> 
          <phase>none</phase> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.7.2</version> 
        <executions> 
         <execution> 
          <id>default-test</id> 
          <phase>none</phase> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <artifactId>maven-jar-plugin</artifactId> 
        <version>2.3.1</version> 
        <executions> 
         <execution> 
          <id>default-jar</id> 
          <phase>none</phase> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <artifactId>maven-install-plugin</artifactId> 
        <version>2.3.1</version> 
        <executions> 
         <execution> 
          <id>default-install</id> 
          <phase>none</phase> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <artifactId>maven-deploy-plugin</artifactId> 
        <version>2.5</version> 
        <executions> 
         <execution> 
          <id>default-deploy</id> 
          <phase>none</phase> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</project> 

을 이제이 pom으로 모든 기본 단계가 비활성화됩니다.

이제이 생성물을 모든 생성 프로젝트에 사용하십시오. 위의 POM은 모두을 부모 POM에 상속하지만 generate-sources 이후 단계를 사용 중지하는 특수 플러그인 관리 파트를 추가합니다.

project1/generate/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>your-group</groupId> 
     <artifactId>generate-parent</artifactId> 
     <version>your-parent-version</version> 
     <relativePath>../../generate-parent</relativePath> 
    </parent> 

    ... 
    The rest of your pom 
    ... 
</project> 

이 효과적으로 당신이 원하는 것을 할 것입니다

generate-parent는이 프로젝트를 생성하기 위해 당신이 원하는 모든 플러그인 관리를 추가하는 중간 사람이다.