2012-06-02 13 views
16

Ho un progetto CXF WS che vorrei utilizzarlo in un altro progetto, vorrei consumare questo WS in un progetto Web ma non so come generare il file Jar.Maven - Genera Jar e War

Per favore avete qualche idea o un esempio?

Grazie

risposta

26

Il plugin maven-war supporta la creazione di un artefatto separato che contiene solo le classi.

http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html

si veda il parametro 'attachClasses'. Non c'è bisogno di aggiungere il plugin jar o pasticciare con la confezione. Basta aggiungere il plugin war a pluginManagement e attivarlo.

Tuttavia, temo che questo non sia quello che vuoi. Per utilizzare un servizio Web CXF, è necessario un client. Per ottenere un client, seguire le istruzioni negli esempi CXF su come generare e utilizzare gli stub client. Avrai bisogno di un progetto maven separato per questo.

+0

questo è bello ma l'aggiunta ' classi' è inusuale in questi giorni – aliopi

20

Prova ad aggiungere questo nella vostra sezione di generazione:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>make-a-jar</id> 
      <phase>compile</phase> 
      <goals> 
      <goal>jar</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
+0

Sembra che devo cambiare fase a pacchetto. Se è impostato per la compilazione, c'è un errore su pom.xml. – Stony

+0

Questo ha funzionato, ma come dovresti includere questo * .jar prodotto dal plugin maven-jar all'interno di un pacchetto war creato dal plugin maven-war? –

2

mvn package a meno che il project's packaging è qualcosa oltre jar. Quindi è necessario add an execution del jar plugin, come descritto nello plugin's usage page e come la prima risposta ha mostrato. Meglio ancora, se non è un barattolo, dividerlo in due moduli: uno che contiene un codice riutilizzabile e l'altro quello che lo utilizza.

6

Questo è un modo per raggiungerlo, tramite la proprietà. Per impostazione predefinita verrà generato un file di guerra e quando si desidera che il jar imposti la proprietà.

mvn install -Dp.type=jar 

pom.xml

<properties> 
    <p.type>war</p.type> 
</properties> 
<packaging>${p.type}</packaging> 
5

aggiungete quanto segue al pom.xml del progetto di guerra.

<attachClasses>true</attachClasses> alla configurazione del plugin di guerra

<groupId>com.yourorg.foobar</groupId> 
<artifactId>hello-world</artifactId> 
<packaging>war</packaging> 
<version>1.0</version> 
<name>hello</name> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>3.0.0</version> 
      <configuration> 
       <attachClasses>true</attachClasses> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

aggiungete quanto segue al pom.xml del progetto in cui si desidera importare barattolo di progetto di guerra

<classifier>classes</classifier> alla dipendenza dalle importazioni

<dependency> 
    <groupId>com.yourorg.foobar</groupId> 
    <artifactId>hello-world</artifactId> 
    <version>1.0</version> 
    <classifier>classes</classifier> 
</dependency> 
+0

c'è un modo per cambiare il nome del file jar? – barha

+1

Ecco la risposta, http://stackoverflow.com/a/14490656/4417818 – Nilesh

3

Questo dovrebbe funzionare:

<!-- Maven JAR plugin --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>jar-services-provided</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

<!-- Install the jar locally --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-install-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>install-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>${project.groupId}</groupId> 
       <version>${project.version}</version> 
       <file> 
        ${project.build.directory}/${project.artifactId}-${project.version}.jar 
       </file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Tratto da this blog.

0

Il modo migliore per raggiungere questo obiettivo è quello di utilizzare Maven plug-in assemblea da questo è possibile controllare anche il nome definitivo del vaso:

Aggiungere il seguente plugin nella vostra pom.xml:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> 
       </descriptors> 
       <finalName>${artifactId}-${version}</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
     </plugin> 

montaggio.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>model</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.outputDirectory}</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>**/*</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

È possibile, infine, costruire il progetto con il seguente comando:

mvn assemblaggio pacchetto pulito: single installare