2012-06-02 10 views
16

Tengo un proyecto CXF WS que lo usaría en otro proyecto, me gustaría consumir esta WS en un proyecto web pero no saber cómo generar archivo JAR.Maven - Generar tarro y la Guerra

Por favor, ¿tiene alguna idea o un ejemplo?

Gracias

Respuesta

26

El experto en la guerra-plugin es compatible con la creación de un artefacto separado que simplemente contiene las clases.

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

Véase el parámetro '' attachClasses. No es necesario agregar el plugin jar o meterse con el empaque. Simplemente agregue el complemento de guerra a pluginManagement y enciéndalo.

Sin embargo, me temo que esto no es lo que quiere. Para consumir un servicio web CXF, necesita un cliente. Para obtener un cliente, siga las instrucciones en las muestras de CXF sobre cómo generar y usar los talones de los clientes. Querrá un proyecto de experto separado para esto.

+0

esto es bueno, pero la adición ' clases' es inusual estos días – aliopi

20

Trate de añadir esto en su sección de construcción:

<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

Parece que tengo que cambiar de fase para empaquetar. Si está configurado para compilar, hay un error en pom.xml. – Stony

+0

Esto funcionó, pero ¿cómo incluiría este * .jar producido por maven-jar-plugin dentro de un paquete de guerra creado por maven-war-plugin? –

2

mvn package a menos que su project's packaging es algo más que jar. Entonces necesitaría add an execution del jar plugin, como se describe en el plugin's usage page y como se mostró en la primera respuesta. Mejor aún, si no se trata de un contenedor, divídalo en dos módulos: uno que sea un contenedor que contenga su código reutilizable y otro que lo use.

6

Esta es una manera de lograr que, a través de la propiedad. De forma predeterminada, generará un archivo de guerra y, cuando lo desee, simplemente configurará la propiedad.

mvn install -Dp.type=jar 

pom.xml

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

Agregar siguiente para pom.xml del proyecto de guerra.

<attachClasses>true</attachClasses> a la configuración del plug-in de la 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> 

Agregar siguiente para pom.xml del proyecto en el que desea importar frasco de proyecto de la guerra

<classifier>classes</classifier> de dependencia de las importaciones

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

¿hay alguna manera de cambiar el nombre del archivo jar? – barha

+1

Aquí está la respuesta, http://stackoverflow.com/a/14490656/4417818 – Nilesh

3

Esto debería funcionar:

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

Tomado de this blog.

0

La mejor manera de lograr esto es mediante el uso de Maven plugin de ensamblaje por esto también se puede controlar el nombre final de la jarra:

Añadir el siguiente plug-in en su 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> 

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

Puede finalmente construir el proyecto con el siguiente comando:

mvn conjunto de envase limpio: sola instalación

Cuestiones relacionadas