11
votes

Construire un projet de guerre avec une dépendance ponctuelle décompressée?

J'ai deux projets, my-lib code> et mon-webapp code>. Le premier projet est une dépendance de My-webApp code>. Ainsi, lorsque vous demandez à Maven2 de construire ma guerre, le JAR MY-LIB CODE> est ajouté dans le répertoire Web-INF / LIB / CODE> de l'application Web.

Toutefois, Je souhaite que le my-lib code> JAR soit décompressé directement dans le répertoire web-inf / classes code>, comme si les sources my-lib code> étaient contenu dans le projet mon-webapp code>. p>

dans d'autres mots, au lieu d'avoir le contenu de la guerre suivant: p> xxx pré>

i Voulez-vous avoir que: P>

my-webapp/
  ...
  WEB-INF/
    classes/
      my-lib files
    lib/
      ... (others third libraries)


0 commentaires

5 Réponses :


1
votes

Le Débattre Mojo semble être proche à ce que vous visez. Je ne sais pas comment compléter le flux complet que vous proposez cependant.

(BTW, je suis douteux que cela soit une bonne idée. Les classes utilitaires devraient entrer dans des pots et que les pots sont mis en guerre ou l'oreille. Déballage des pots d'utilité semble tort)


3 commentaires

En ce qui concerne votre commentaire: je veux seulement déballer ma bibliothèque , pas les autres. Je tiens à le faire à cause des fichiers de propriétés, qui peuvent être modifiés. Pour le moment, ces fichiers sont stockés dans le fichier My-Lib.jar, et si vous souhaitez modifier l'un des fichiers, vous devez décompresser le bocal, modifier le fichier, puis remballer le pot ...


Ne pouviez-vous pas simplement poser un correctif dans le répertoire des classes lorsque vous modifiez un fichier?


Utilisation de ce plugin, j'ai abouti à décompresser le bocal dans le répertoire Web-Inf / Classes. Cependant, j'ai aussi le My-Lib.jar dans le Web-Inf / Lib / Répertoire ...



1
votes

[Oups, vient de réaliser que vous utilisiez Maven. Je ne supprime pas cette réponse car elle peut arriver à la rescousse de certains utilisateurs de fourmis. Donc, il n'y a pas besoin de me modeler ...]

Combien de fois je dois mentionner que JAR , guerre et oreille Les tâches des fourmis sont sous-éléments du ZIP un? :-) Si je me souviens bien, quelque chose comme ça ferait le truc: xxx

mérite également d'un essai est avec src = "myLib.jar" Mais je n'ai pas testé cette option.


0 commentaires

6
votes

AS la réponse de BLAUFISH, vous pouvez utiliser le plugin de dépendance Maven-Dépendance- Déballez Mojo pour déballer un artefact. Cependant, pour éviter le pot figurant dans Web-Inf / Lib, vous devez ne pas la spécifier comme une dépendance em>, et configurez plutôt le plugin sur Déballez des artefacts spécifiques .

La configuration suivante déballera le contenu de certains.group.id LIB: 1.0: JAR dans la cible / classes pendant la phase de traitement des ressources, même si l'artefact n'est pas défini comme une dépendance. Soyez prudent lorsque cela le faisait car il existe un potentiel de clobber votre contenu réel, cela peut causer beaucoup de débogage. P>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
    <execution>
      <id>unpack-my-lib</id>
      <phase>process-resources</phase>
      <goals>
        <goal>unpack</goal>
      </goals>
      <configuration>
        <artifactItems>
          <artifactItem>
            <groupId>some.group.id</groupId>
            <artifactId>my-lib</artifactId>
            <version>1.0</version>
            <type>jar</type>
            <overWrite>false</overWrite>
          </artifactItem>
        </artifactItems>
        <outputDirectory>${project.build.outputDirectory}</outputDirectory>
        <overWriteReleases>false</overWriteReleases>
      </configuration>
    </execution>
  </executions>
</plugin>


2 commentaires

De plus, il vaut mieux ajouter My-Lib parmi des dépendances ordinaires dans fourni portée; Si votre guerre a des cours qui compilent contre cela, c'est un must. Et, supprimez la version du artifactitem , telle qu'elle sera prise à partir de la dépendance.


Définition de la portée My-LIB à fournir exclut les DEP transitifs pour moi avec Maven 3.0.4. La question est maintenant de savoir comment utiliser My-LIB pour la compilation tout en ajoutant uniquement des contenus extraits et des dépendances transitives à la guerre.



1
votes

J'ai pu utiliser le déballage Mojo comme décrit ci-dessus, plus j'ai marqué la dépendance elle-même comme " fourni "(portée) pour éviter de faire dupliquer le contenu du pot sous Web-Inf / Lib.


0 commentaires

2
votes

Vous pouvez configurer le plugin de dépendance maven-dépendance pour le faire, déballer au lieu de copier un bocal comme expliqué ici .

<project>
[...]
<build>
 <plugins>
   <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-dependency-plugin</artifactId>
     <version>2.5.1</version>
     <executions>
       <execution>
         <id>unpack</id>
         <phase>package</phase>
         <goals>
           <goal>unpack</goal>
         </goals>
         <configuration>
           <artifactItems>
             <artifactItem>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
               <version>3.8.1</version>
               <type>jar</type>
               <overWrite>false</overWrite>
               <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
               <destFileName>optional-new-name.jar</destFileName>
               <includes>**/*.class,**/*.xml</includes>
               <excludes>**/*test.class</excludes>
             </artifactItem>
           </artifactItems>
           <includes>**/*.java</includes>
           <excludes>**/*.properties</excludes>
                 <outputDirectory>${project.build.directory}/wars</outputDirectory>
           <overWriteReleases>false</overWriteReleases>
           <overWriteSnapshots>true</overWriteSnapshots>
         </configuration>
       </execution>
     </executions>
   </plugin>
 </plugins>
</build>
[...]
</project>


0 commentaires