2010-02-25 11 views
5

Y at-il une possibilité de créer un artefact Maven qui contiendra uniquement des ressources mais pas de sources et qui peut être réutilisé par d'autres projets?Est-ce que le projet de ressource réutilisable maven est possible?

La motivation est la suivante. J'ai une bibliothèque qui contient seulement du code html/css/javascript. Cette bibliothèque doit être emballée en tant que ressources dans le projet de guerre. Pour l'instant, je construis des archives web avec des ressources par single pom. Mais suis-je capable de séparer le code html/css/javascript en nouvel artefact et de le réutiliser dans plusieurs projets de guerre?

Répondre

9

Maven Overlays. Voir Manipulating WAR Overlays pour plus d'exemples.

+1

@Pascal Thiver vous semblez connaître votre chemin autour de docs maven, c'est bien écrit mais mal structuré si vous me demandez ..Y at-il un lien qui contient toute la documentation de a à z, peut-être que je trouve des choses que je peux utiliser plus tard, peut-être même maintenant mais je ne sais pas s'il existe .. +1 – ant

+0

C'est ça! Merci. –

+0

@ c0mrade La documentation est quelque chose dont les gens se plaignent souvent donc je suppose que vous avez raison (l'information est là mais difficile à trouver, ce qui est exactement ce que vous dites). Heureusement, je sais où regarder ou quoi rechercher maintenant. Mais il y a quelques bons livres qui peuvent vous aider, par exemple http://www.sonatype.com/book/ (disponible en ligne) ou http://www.packtpub.com/apache-maven-2-effective-implementations/ livre. Hautement recommandé. –

1

Vous pouvez le faire avec le Maven assembly plugin.

+0

Comment exactement je peux faire cela? –

+0

@Volodymyr S'il vous plaît vérifier le guide de l'utilisateur que j'ai lié, il contient également des exemples. Si vous avez une question plus concrète alors, et nous dire plus de détails sur votre projet, nous pouvons vous donner des réponses plus concrètes :-) –

+0

Dans la mesure où je comprends les assemblages de distribution, c'est quelque chose de final et non réutilisable. N'est-ce pas? Si oui, ils ne sont pas adaptés pour faire ce dont j'ai besoin. Avec maven-assembly-plugin, je peux créer un ensemble de distribution pour la bibliothèque de ressources. Dans mon pom de guerre, je peux même utiliser cet artefact comme dépendance. Dans un tel cas, j'obtiendrai target \ war-artefact-1.0 \ WEB-INF \ lib \ ressource-artefact-1.0.jar au lieu du contenu de l'assemblage de distribution décompressé dans le dossier target \ war-artefact-1.0 \. Dans un guide fourni, je ne trouve aucun moyen d'extraire l'assembly de distribution dans la racine de l'archive web. –

0

Je n'imagine pas que maven vous empêcherait d'associer quelques ressources et d'ajouter cela comme une dépendance dans votre projet web. Cependant, la façon dont vous devez référencer les ressources serait un peu étrange. Je ne suis pas habitué à charger des feuilles de style CSS en tant que ressources java dans un fichier jar dans WEB-INF/lib. Je voudrais les appeler des ressources Web normales, par rapport à la racine du fichier WAR, et non via le chargeur de classe.

+0

Oui, je n'ai pas besoin de ressources pour être secoué. J'ai besoin qu'ils existent dans mon dossier Web et dans les archives Web pour les renvoyer statiquement, pas via le chargeur de classe. –

0

C'est une chose assez simple à tester:

$ ls -R 
.: 
pom.xml src 

./src: 
main 

./src/main: 
resources 

./src/main/resources: 
README.txt content-is-here.txt 

$ mvn package 
... Maven doing it's thing... 

$ unzip -l target/test-1.0-SNAPSHOT.jar 
Archive: target/test-1.0-SNAPSHOT.jar 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 02-25-2010 16:18 META-INF/ 
     123 02-25-2010 16:18 META-INF/MANIFEST.MF 
     10 02-25-2010 16:18 content-is-here.txt 
     0 02-25-2010 16:18 README.txt 
     0 02-25-2010 16:18 META-INF/maven/ 
     0 02-25-2010 16:18 META-INF/maven/group/ 
     0 02-25-2010 16:18 META-INF/maven/group/test/ 
     626 02-25-2010 16:15 META-INF/maven/group/test/pom.xml 
     106 02-25-2010 16:18 META-INF/maven/group/test/pom.properties 
---------      ------- 
     865      9 files 
+0

Je dois avoir deux projets, pas un. Le premier projet devrait contenir des ressources. Le deuxième projet devrait inclure les ressources du premier projet à la guerre. –

+0

Ensuite, une superposition WAR est ce que vous voulez –

+0

Oui, je peux voir maintenant que les superpositions est exactement ce dont j'ai besoin. –

0

Cela peut être fait par l'artefact discordante des ressources et le déballage dans src/main/ressources dans le projet de guerre pendant la phase validate par exemple. Ressources pom pom est trivial, mais la guerre contiendra les éléments suivants:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>validate</phase> 
      <goals> 
      <goal>unpack</goal> 
      </goals> 
      <configuration> 
      <artifactItems> 
       <artifactItem> 
        <groupId>my.company</groupId> 
        <artifactId>resource-artifact</artifactId> 
        <version>1.0</version> 
        <overWrite>true</overWrite> 
        <outputDirectory>src/main/resources</outputDirectory> 
       </artifactItem> 
      </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin>