2013-01-13 4 views
0

모든 라이센스를 관리하기 위해 라이센스 플러그인을 설정하려고하는 다중 모듈 project이 있습니다. 다음은 프로젝트 설정입니다.라이센스 플러그인이 포함 된 Maven 다중 모듈 프로젝트

─── transfuse-project 
    ├── examples 
    │   ├── helloAndroid 
    │   │   ├── pom.xml 
    │   │   ├── ... 
    │   ├── integrationTest 
    │   │   ├── pom.xml 
    │   │   ├── ... 
    │   ├── pom.xml 
    │   └── ... 
    ├── transfuse 
    │   ├── pom.xml 
    │   ├── ... 
    ├── transfuse-api 
    │   ├── pom.xml 
    │   ├── ... 
    ├── NOTICE 
    └── pom.xml 

각 pom.xml은 transfuse-project pom.xml에서 상속합니다. 내가 관련 파일에주의 사항을 적용하려면 라이센스 플러그인을 설정 한 pom.xml 파일이 프로젝트에 : 나는 루트 (수혈 프로젝트)의에서 직접 구축 할 경우

 <plugin> 
      <groupId>com.mycila.maven-license-plugin</groupId> 
      <artifactId>maven-license-plugin</artifactId> 
      <version>1.9.0</version> 
      <configuration> 
       <header>NOTICE</header> 
       <includes> 
        <include>**/*.java</include> 
        <include>**/*.xml</include> 
       </includes> 
       <excludes> 
        <exclude>**/.*/**</exclude> 
        <exclude>target/**</exclude> 
        <exclude>**/AndroidManifest.xml</exclude> 
       </excludes> 
       <properties> 
        <year>2013</year> 
        <name>John Ericksen</name> 
       </properties> 
       <useDefaultExcludes>true</useDefaultExcludes> 
       <strictCheck>true</strictCheck> 
      </configuration> 
      <executions> 
       <execution> 
        <id>check-headers</id> 
        <phase>verify</phase> 
        <goals> 
         <goal>check</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

이 구성은 작동합니다. 문제는 integrationTest 예제 나 API를 직접 빌드 할 때 발생합니다.

[ERROR] Failed to execute goal com.mycila.maven-license-plugin:maven-license-plugin:1.9.0:check (check-headers) on project transfuse-api: Some files do not have the expected license header -> [Help 1] 

그리고 더 나쁜 것, 또 다른 종속의주의 사항 파일을 찾습니다 Maven은 내가 프로젝트 루트에서 제공되는주의 사항 파일을 찾을 수 없습니다. 하위 모듈에 mvn license:format을 실행하면 모든 모듈의 헤더가 종속성의 NOTICE 파일로 바뀝니다.

각 하위 모듈 내에이 문제를 수정하고 자체 라이센스 플러그인을 사용하여 각 하위 모듈 pom을 구성하는 NOTICE 파일을 추가 할 수 있다고 생각하지만 가능한 경우 중복을 피하고 싶습니다. 프로젝트 구성에서 작동 할 수있는 구성이나 설정이 있습니까?

<header>${main.basedir}/NOTICE</header> 

세 번째 옵션에서 속성을 설정한다 : 문제가 해결되지 않으면

답변

1

봅니다 그것을 set a property to and in the parent module's basedir을 시도하고 사용

<header>${basedir}/NOTICE</header> 

를 사용하여 절대 경로를 사용하는 런타임 :

mvn clean install -Dmain.basedir=path/to/main/basedir 

편집 :

다른 옵션은 라이센스 플러그인 전에 maven-dependency-plugin을 실행하는 것입니다.

<header>${project.build.directory}/license/NOTICE</header> 

Edit2가 : 내가 찾기-받는다는 건너 온

하지만 당신은 부모에 그후 header 변경

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.6</version> 
     <executions> 
      <execution> 
      <id>unpack-parent</id> 
      <phase>verify</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
       <artifactItem> 
        <groupId>parent</groupId> 
        <artifactId>parent</artifactId> 
        <version>parent</version> 
        <type>pom</type> 
        <overWrite>false</overWrite> 
        <outputDirectory>${project.build.directory}/license</outputDirectory> 
        <includes>NOTICE</includes> 
       </artifactItem> 
       </artifactItems> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

(maven-assembly-plugin plugin 사용)주의 사항을 첨부 확인해야 -플러그인. 나는 이것이 작동 할 수 있다고 생각한다 :

<plugin> 
    <groupId>com.github.goldin</groupId> 
    <artifactId>find-maven-plugin</artifactId> 
    <version>0.2.5</version> 
    <executions> 
     <execution> 
      <id>find-notice-file</id> 
      <goals> 
       <goal>find</goal> 
      </goals> 
      <phase>validate</phase> 
      <configuration> 
       <propertyName>notice.file</propertyName> 
       <file>NOTICE</file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

아, 나뿐만 아니라 것을 시도했다. 루트에서 빌드하면 작동하지만 하위 모듈을 빌드하는 데 실패합니다. –

+0

편집 내 답변 ... 작동하지만 여분의 상용구 – asgoth

+0

빙고, 두 번째 옵션이 효과가 있어요. 도와 주셔서 감사합니다. –

0

실제로 이것을하는 것이 훨씬 쉬운 방법이다. 구성에서 aggregate 태그를 true으로 설정하기 만하면됩니다. 여기에 전체 maven-license-plugin 정의는 다음과 같습니다

<plugin> 
    <groupId>com.mycila.maven-license-plugin</groupId> 
    <artifactId>maven-license-plugin</artifactId> 
    <version>1.10.b1</version> 
    <configuration> 
     <header>etc/header.txt</header> 
     <aggregate>true</aggregate> 
     <includes> 
      <include>**/*.java</include> 
     </includes> 
    </configuration> 
</plugin> 

당신은 단지 부모 루트 디렉토리에 etc/header.txt에서 header.txt라는 파일이 필요합니다.

+0

이것은 부모 모듈을 만들 때 작동하지만, 개별 모듈을 단독으로 만들지는 않습니다. –

0

설정이 두 가지 구성 특성으로 예를보십시오 :

<plugin> 
    <groupId>com.mycila</groupId> 
    <artifactId>license-maven-plugin</artifactId> 
    <version>2.7</version> 
    <configuration> 
    <header>/NOTICE</header> 
    <aggregate>true</aggregate> 
    </configuration> 
</plugin>