9
votes

À Maven2, quel est le moyen le plus simple de construire une guerre et l'oreille de contenir cette guerre dans un seul pom?

Situation est assez simple. J'ai une webApp Java que je convoite pour être construite avec Maven. À l'heure actuelle, l'application est construite avec la fourmi dans un fichier de guerre unique, qui est ensuite regroupé dans une oreille avec une application très simple.xml.

maven-war-plugin et maven-oreille-plugin Les deux semblent assez simples pour moi, et il semble qu'ils me donnent lieu pour être obligés de considérer le au-dessus de deux projets distincts, avec le projet de guerre comme une dépendance du projet EAR. Cela semble un peu peu pratique, surtout parce qu'un cadre de profil du projet de guerre changera pour chaque environnement, ce qui semble que cela me force à dupliquer que la construction ajuste chaque fois que j'ai également tenté de construire l'oreille.

Tout cela à dire: Y a-t-il un moyen simple de construire la guerre et de l'emballage dans cette oreille de manière triviale? J'aimerais éviter de les maintenir comme deux projets distincts, mais préférez de la même manière à ne pas recourir à un hack trop désordonné en utilisant des assemblées pour y accomplir.


0 commentaires

3 Réponses :


17
votes

Tout cela à dire: Y a-t-il un moyen simple de construire la guerre et de l'emballage dans cette oreille de manière triviale? J'aimerais éviter de les maintenir comme deux projets distincts, mais préférez de la même manière à ne pas recourir à un hack trop désordonné en utilisant des assemblées pour y accomplir.

Réponse courte: NO , il n'y a pas de simple façon maven-moyen de le faire car cela irait à une règle maven qui est "un artefact par projet" (comprenez une sortie par projet qui est vrai dans 99% des cas).

Et en fait, je recommanderais vivement à pas aller de manière hacky et oublier d'utiliser des assemblages pour créer une oreille. Au lieu de cela, créez deux modules, un avec un emballage de type guerre , l'autre avec un emballage de type oreille en fonction de l'artefact de guerre et de les déclarer comme des modules d'un parent < Code> pom.xml . Comme ceci: xxx

Si vous allez pour Maven, adoptez la philosophie maven, ne vous luttez pas, cela vous fera gagner beaucoup de douleur. Sérieusement, des assemblages de piratage pour faire ce que le plug-in-oreille maven-oreille fait déjà est juste un anti-sec. Vous feriez mieux de vous en tenir à la fourmi dans ce cas.


1 commentaires

Pour ce que ça vaut la peine, je ne préconisais pas prendre une approche hacky / combattre Maven, j'ai simplement senti qu'il n'y avait pas d'autre point de vente de plusieurs projets / modules. Je n'ai posé que la question de confirmer qu'il n'y avait en fait pas de moyen propre d'accomplir cela dans un seul projet. En tant que tel, je vais planifier aller avec la mise en page que vous avez décrite ci-dessus.



2
votes

dans Maven Chaque projet produit un artifact. Dans votre situation, je suggère de créer deux projets une pour la guerre et une pour l'oreille. Si vous avez besoin de versions mutltiples de vos projets, vous pouvez aller à l'aide de classificateurs et de profils.

Ceci est extrait de RichFaces Exemples POM. P> xxx pré>

dans votre oreille POM Utilisez des profils pour importer une dépendance requise avec le classificateur approprié. P>

<profile>
  <id>jee5</id>
  <dependencies>
     <dependency>
       <groupId>org.richfaces.samples</groupId>
       <artifactId>richfaces-demo</artifactId>
       <version>${richfaces-version}</version>
       <classifier>jee5</classifier>
       <type>war</type>
       <scope>runtime</scope>
     </dependency>
  </dependencies>
</profile>   


0 commentaires

3
votes

Je sais que cela a 5 ans maintenant, mais c'était toujours la première réponse qui est venue quand j'ai fouillé. En outre, tandis que "ce n'est pas la voie mavenne" est une réponse parfaitement raisonnable pour certaines personnes, d'autres peuvent toujours préférer utiliser un seul pom comme invité à demander, et ce n'est vraiment pas si compliqué.

Premier, créez une guerre standard. pom.xml pour générer le fichier de guerre que vous souhaitez inclure à l'oreille. Laissez l'emballage en tant que guerre. P>

Ensuite, écrivez votre propre application.xml (en SRC / Main / Main / Application ou partout où) Utilisation d'un espace réservé pour le nom de fichier de guerre: P>

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <tasks>
          <ear destfile="${project.build.directory}/${project.build.finalName}.ear"
               appxml="${project.build.outputDirectory}/META-INF/application.xml">
            <fileset dir="${project.build.outputDirectory}" includes="META-INF/*.xml"/>
            <fileset dir="${project.build.directory}" includes="${project.build.finalName}.war"/>
          </ear>
        </tasks>
      </configuration>
    </execution>
  </executions>
</plugin>


0 commentaires