2012-08-23 20 views
6

He estado siguiendo el ejemplo en el sitio de maven-ear-plugin que shows how to add third-party libraries to the generated application.xml. Sin embargo, no parece estar funcionando como esperaba. De forma similar, se está ignorando el módulo web contextRoot.maven-ear-plugin no incluye jarModule en application.xml

De acuerdo con documentation, lo que estoy tratando de hacer debería ser completamente posible.

La raíz de contexto de un módulo web puede ser personalizado utilizando el parámetro contextRoot.

Tenga en cuenta que las bibliotecas de terceros (es decir, JarModule) no están incluidos en el aplicacion.xml generada (sólo ejb-cliente debe ser incluido en una entrada de java). Sin embargo, se puede incluir una dependencia de jar en el archivo application.xml generado al especificar includeInApplicationXml flag.

Tengo el siguiente resultado cuando ejecuta la compilación en mi application.xml.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE application PUBLIC 
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" 
    "http://java.sun.com/dtd/application_1_3.dtd"> 
<application> 
    <display-name>MyApp.EAR</display-name> 
    <module> 
    <ejb>MyApp.jar</ejb> 
    </module> 
    <module> 
    <web> 
     <web-uri>MyApp.war</web-uri> 
     <context-root>/MyApp.Web</context-root> 
    </web> 
    </module> 
</application> 

De la siguiente configuración maven (pom.xml).

... 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.blah</groupId> 
<artifactId>MyApp.EAR</artifactId> 
<version>1.0</version> 
<packaging>ear</packaging> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>maven-ear-plugin</groupId> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.7</version> 
      <configuration> 
       <applicationName>MyApp</applicationName> 
       <modules> 
        <ejbModule> 
         <groupId>com.blah</groupId> 
         <artifactId>MyApp.EJB</artifactId> 
        </ejbModule> 
        <webModule> 
         <groupId>com.blah</groupId> 
         <artifactId>MyApp.Web</artifactId> 
         <contextRoot>MyApp</contextRoot> 
        </webModule> 
        <jarModule> 
         <groupId>org.slf4j</groupId> 
         <artifactId>slf4j-simple</artifactId> 
         <includeLibInApplicationXml>true</includeLibInApplicationXml> 
        </jarModule> 
       </modules> 
       <archive> 
        <manifestEntries> 
         <WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <!-- web and ejb modules --> 
    <dependency> 
     <groupId>com.blah</groupId> 
     <artifactId>MyApp.EJB</artifactId> 
     <version>1.0</version> 
     <type>ejb</type> 
    </dependency> 
    <dependency> 
     <groupId>com.blah</groupId> 
     <artifactId>MyApp.Web</artifactId> 
     <version>1.0</version> 
     <type>war</type> 
    </dependency> 
</dependencies> 
... 

Es inmediatamente obvio que la aplicación.xml no se está generando como pretendía.

  1. El contextRoot suministrado no es correcto en la aplicación.xml, en su lugar se emite el nombre predeterminado de MyApp.Web en lugar de la MyApp especificada.
  2. El org.slf4j jarModule especificado falta por completo de la aplicación.xml.

¿Qué estoy haciendo mal?

Debug de Maven se muestra a continuación.

[DEBUG] ----------------------------------------------------------------------- 
[DEBUG] Goal:   org.apache.maven.plugins:maven-ear-plugin:2.4.2:generate-application-xml (default-generate-application-xml) 
[DEBUG] Style:   Regular 
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <description>${project.description}</description> 
    <displayName>${project.artifactId}</displayName> 
    <encoding default-value="UTF-8"/> 
    <generatedDescriptorLocation>${project.build.directory}</generatedDescriptorLocation> 
    <includeLibInApplicationXml default-value="false"/> 
    <project>${project}</project> 
    <version default-value="1.3"/> 
    <workDirectory>${project.build.directory}/${project.build.finalName}</workDirectory> 
</configuration> 

P.S. Traté de crear la etiqueta maven-ear-plugin, pero no me dejaba porque no soy lo suficientemente confiable. Si alguien pudiera crear eso, estaría agradecido.

+0

Parecería estar ignorando por completo mi configuración por completo. ¿Alguna idea de por qué? – mrswadge

Respuesta

9

Lo resolví, como de costumbre, fue un error del usuario.

Extrañamente, estaba produciendo el archivo EAR de forma bastante correcta, a pesar de que mi complemento no estaba configurado correctamente.

Substituí ...

<groupId>maven-ear-plugin</groupId> 
<artifactId>maven-ear-plugin</artifactId> 

con ...

<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-ear-plugin</artifactId> 

Entonces cambiado ...

<includeLibInApplicationXml>true</includeLibInApplicationXml> 

a ...

<includeInApplicationXml>true</includeInApplicationXml> 

De repente, hizo lo que pretendía hacer en primer lugar.

Mi pom.xml final se veía así ya que decidí que quería que todos los jar se incluyeran automáticamente.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.blah</groupId> 
    <artifactId>MyApp.EAR</artifactId> 
    <version>1.0</version> 
    <packaging>ear</packaging> 

    <properties> 
     <weblogic.version>10.3</weblogic.version> 
     <weblogic.version.minor>${weblogic.version}.4</weblogic.version.minor> 
     <weblogic.host>***</weblogic.host> 
     <weblogic.port>***</weblogic.port> 
     <weblogic.username>***</weblogic.username> 
     <weblogic.password>***</weblogic.password> 
    </properties> 

    <build> 
     <finalName>MyApp</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-ear-plugin</artifactId> 
       <version>2.7</version> 
       <configuration> 
        <applicationName>MyApp</applicationName> 
      <includeLibInApplicationXml>true</includeLibInApplicationXml> 
        <modules> 
         <ejbModule> 
          <groupId>com.blah</groupId> 
          <artifactId>MyApp.EJB</artifactId> 
         </ejbModule> 
         <webModule> 
          <groupId>com.blah</groupId> 
          <artifactId>MyApp.Web</artifactId> 
          <contextRoot>MyApp</contextRoot> 
         </webModule> 
        </modules> 
        <archive> 
         <manifestEntries> 
          <WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version> 
         </manifestEntries> 
        </archive> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>com.oracle.weblogic</groupId> 
       <artifactId>weblogic-maven-plugin</artifactId> 
       <version>10.3.4</version> 
       <configuration> 
        <adminurl>t3://${weblogic.host}:${weblogic.port}</adminurl> 
        <user>${weblogic.username}</user> 
        <password>${weblogic.password}</password> 
        <upload>true</upload> 
        <action>deploy</action> 
        <remote>false</remote> 
        <verbose>true</verbose> 
        <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source> 
        <name>${project.build.finalName}</name> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>install</phase> 
         <goals> 
          <goal>deploy</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 

     <pluginManagement> 
      <plugins> 
       <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> 
       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>org.apache.maven.plugins</groupId> 
             <artifactId>maven-ear-plugin</artifactId> 
             <versionRange>[2.7,)</versionRange> 
             <goals> 
              <goal>generate-application-xml</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <ignore></ignore> 
            </action> 
           </pluginExecution> 
          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 

    <dependencies> 
    <dependency> 
     <groupId>com.blah</groupId> 
     <artifactId>MyApp.EJB</artifactId> 
     <version>1.0</version> 
     <type>ejb</type> 
    </dependency> 
    <dependency> 
     <groupId>com.blah</groupId> 
     <artifactId>MyApp.Web</artifactId> 
     <version>1.0</version> 
     <type>war</type> 
    </dependency> 
    </dependencies> 
</project> 
+0

Su ejemplo final ya no es usar 'jarModule'. ¿Tuviste problemas con eso? –

+0

@ SérgioMichels No, eso no estaba relacionado con el problema. – mrswadge

1

Muchas gracias, he estado buscando una solución a este problema desde hace algunas horas. :) Will ad my pom en caso de que esto también pueda ayudar a alguien más.

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>appletree.be-multi</artifactId> 
     <groupId>be.appletree</groupId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>appletree.be-ear</artifactId> 
    <packaging>ear</packaging> 

    <dependencies> 


     <dependency> 
      <groupId>be.appletree</groupId> 
      <artifactId>appletree.be-domain</artifactId> 
      <version>1.0-SNAPSHOT</version> 
      <type>jar</type> 
     </dependency> 

     <dependency> 
      <groupId>be.appletree</groupId> 
      <artifactId>appletree.be-ejb</artifactId> 
      <version>1.0-SNAPSHOT</version> 
      <type>ejb</type> 
     </dependency> 

     <dependency> 
      <groupId>be.appletree</groupId> 
      <artifactId>appletree.be-web</artifactId> 
      <version>1.0-SNAPSHOT</version> 
      <type>war</type> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-ear-plugin</artifactId> 
       <version>2.8</version> 
       <configuration> 
        <modules> 
         <jarModule> 
          <groupId>be.appletree</groupId> 
          <artifactId>appletree.be-domain</artifactId> 
          <includeInApplicationXml>true</includeInApplicationXml> 
         </jarModule> 
         <webModule> 
          <groupId>be.appletree</groupId> 
          <artifactId>appletree.be-web</artifactId> 
         </webModule> 
         <ejbModule> 
          <groupId>be.appletree</groupId> 
          <artifactId>appletree.be-ejb</artifactId> 
         </ejbModule> 
        </modules> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project>