2013-01-13 2 views
0

J'ai un multi-module project dans lequel j'essaye de configurer le plugin de licence pour gérer toutes les licences. Voici la configuration du projet:Projet multi-module Maven avec le plugin de licence

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

Chaque pom.xml hérite de la pom.xml Transfuser-projet. Dans le projet pom.xml j'ai mis en place le plug-in de licence pour appliquer l'avis aux fichiers pertinents:

 <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> 

Cette configuration fonctionne si je construis directement hors de la racine (transfuser-projet). Le problème se pose lorsque je construis l'exemple integrationTest ou api directement. Maven ne peut pas trouver le fichier AVIS I fourni dans la racine du projet:

[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] 

Et ce qui est pire, il trouve le fichier AVIS d'une autre dépendance. Si j'exécute mvn license:format dans un sous-module, il remplace tous les en-têtes du module par le fichier NOTICE de la dépendance. Je crois que je peux ajouter un fichier NOTICE dans chaque sous-module pour résoudre ce problème et configurer chaque sous-module pom avec son propre plugin de licence, mais je voudrais éviter cette duplication si possible. Y a-t-il une configuration ou une configuration qui fonctionnera avec la configuration de mon projet?

Répondre

1

Essayez d'utiliser un chemin absolu en utilisant

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

Si cela ne fonctionne pas, essayez de set a property to and in the parent module's basedir et de l'utiliser:

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

Une troisième option est mise une propriété à durée:

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

Editer:

Ok, une toute autre option est d'exécuter le maven-dependency-plugin avant votre plugin de licence. Mais vous devez vous assurer que le parent se fixe l'AVIS (avec maven-assembly-plugin plugin)

<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> 

Les header changements alors dans:

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

Edit2:

je suis tombé sur la découverte maven -brancher. Je pense que cela pourrait fonctionner:

<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

ah, j'ai essayé aussi. Construire à partir de la racine fonctionne, mais la construction de l'un des sous-modules échoue. –

+0

Edited ma réponse ... Cela va fonctionner, mais il est extraplate-forme – asgoth

+0

Bingo, la deuxième option travaillée. Merci pour l'aide. –

0

Il existe en fait un moyen beaucoup plus simple de le faire. Définissez simplement l'étiquette aggregate sur true dans la configuration. Voici la pleine définition 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> 

Vous avez alors juste besoin d'avoir un fichier appelé header.txt dans etc/header.txt dans le répertoire racine parent.

+0

Cela fonctionne lors de la construction du parent, mais pas lorsque vous construisez un module individuel par lui-même. –

0

Essayez votre exemple avec ces deux propriétés de configuration définies:

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