Tengo un proyecto maven con uno war y varios proyectos ear. Cada proyecto ear requiere un war / WEB-INF/web.xml ligeramente diferente. Cada ear 's pom.xml usa com.google.code.maven-replacer-plugin:replacer y org.codehaus.mojo:truezip-maven-plugin para reemplazar las fichas en el web.xml, y luego coloca ese nuevo web.xml en el { {X11}}. Todo esto funciona muy bien con la construcción y creación de los artefactos EAR finales.

El problema que tengo es que cuando run (usando Netbeans, pero eso no debería importar), el web.xml utilizado para la implementación (<project>/target/gfdeploy/first-app/web_war/WEB-INF/web.xml) es la versión tokenizada. Intenté agregar fases de ejecución para deploy, pero eso no funciona.

¿Cómo puedo asegurarme de que la implementación de ejecución tenga el web.xml modificado para que pueda probar mi aplicación durante el desarrollo?

Aquí están las partes relevantes del oído pom.xml:

        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>replacer</artifactId>
            <version>1.5.3</version>
            <executions>
                <execution>
                    <id>package-replace</id>
                    <phase>package</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
                <execution>
                    <id>deploy-replace</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>                                        
                <file>${project.parent.basedir}/${web.xml}</file>
                <outputFile>${project.build.directory}/${web.xml}</outputFile>
                <replacements>
                    <replacement>
                        <token>@REALM_NAME@</token>
                        <value>${web.realm}</value>
                    </replacement>
                </replacements>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>truezip-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <id>package-replace-web-xml</id>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <files>
                            <file>
                                <source>${project.build.directory}/${web.xml}</source>
                                <outputDirectory>${project.build.directory}/${project.build.finalName}/${web.zip}/WEB-INF</outputDirectory>
                            </file>
                        </files>
                    </configuration>
                </execution>
                <execution>
                    <id>package-replace-web</id>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <files>
                            <file> 
                               <source>${project.build.directory}/${project.build.finalName}/${web.zip}</source>
                                <outputDirectory>${project.build.directory}/${project.build.finalName}.ear</outputDirectory>
                            </file>
                        </files>
                    </configuration>
                </execution>
                <execution>
                    <id>deploy-replace-web-xml</id>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <phase>deploy</phase>
                    <configuration>
                        <files>
                            <file>
                                <source>${project.build.directory}/${web.xml}</source>
                                <outputDirectory>${project.build.directory}/gfdeploy/${project.artifactId}/web-${project.version}_war/WEB-INF</outputDirectory>
                            </file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>
3
John Manko 22 ene. 2018 a las 23:59

3 respuestas

La mejor respuesta

Le sugiero que mantenga su src / main / webapp / WEB-INF / web.xml por defecto completamente funcional para ejecutarse durante el desarrollo. Luego, mantenga un archivo similar llamado src / main / webapp / WEB-INF / web-ear.xml con toda la preparación de reemplazo.

Envuelva toda su estrategia de complemento de reemplazo dentro de un perfil de Maven y apunte al archivo web-ear.xml . Agregue a este perfil una configuración de plugin de maven-war que usará el archivo alternativo web-ear.xml durante la compilación, en lugar del web.xml predeterminado (marque: < a href = "http://maven.apache.org/plugins/maven-war-plugin/" rel = "nofollow noreferrer"> http://maven.apache.org/plugins/maven-war-plugin/ ):

<profiles>
    <profile>
        <id>change-war-profile</id>
        <build>
            <plugins>
                <!-- all your replacement plugins here -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webXml>src/main/webapp/WEB-INF/web-ear.xml</webXml>
                    </configuration>
                </plugin>
            <plugins>
        </build> 
    </profile>
</profiles>

Asegúrese de activar este perfil durante la construcción EAR maven:

mvn package -Pchange-war-profile
2
Rafael Odon 31 ene. 2018 a las 13:08

Puedes ejecutar tu guerra con el complemento jetty-maven que elige el objetivo de la guerra de ejecución. Ese objetivo ejecuta la guerra empaquetada. Ver: https://www.eclipse.org/jetty/documentation/9.4.x/jetty-maven-plugin.html#running-assembled-webapp-as-war

0
gdegani 22 ene. 2018 a las 21:31

En primer lugar, la fase de implementación (del ciclo de vida de la construcción) significa implementación un artefacto listo para la producción en el repositorio remoto de Maven (por ejemplo, Nexus o Artifactory). En términos generales, despliegue de artefactos se puede tratar como copiando el artefacto . Lea la Introducción al Build Lifecycle para obtener más detalles .

En segundo lugar, Apache Maven no es compatible con implementación de aplicaciones en el servidor de aplicaciones listo para usar. Sin embargo, hay varias formas de hacerlo, dependiendo del servidor de aplicaciones que use. ¿Cuál usas?

Se puede encontrar un complemento especial para JBoss Application Server - jboss-as-maven-plugin. Consulte ejemplo de uso:

<project>
    ...
    <build>
        ...
        <plugins>
            ...
            <plugin>
                <groupId>org.jboss.as.plugins</groupId>
                <artifactId>jboss-as-maven-plugin</artifactId>
                <version>7.9.Final</version>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
        ...
    </build>
...
</project>

Se puede encontrar un complemento similar para GlassFish Server: glassfish-maven-plugin.

Además, si esto es aceptable para usted, puede realizar implementación en 2 pasos desde Netbeans:

  1. Cree el proyecto: ejecute mvn package con todos sus complementos configurados en la fase de paquete.
  2. Implemente el proyecto: ejecute la aplicación en el servidor de aplicaciones desde Netbeans si es compatible (consulte NetBeans Java EE Servers Support página).

Espero que esto ayude.

0
Gregory.K 29 ene. 2018 a las 20:24