create - intellij maven
El artefacto de IDEA de Intellij ''XXXX: la guerra explotó'' tiene una extensión no válida (4)
Cada vez que realizo el cambio más pequeño en mi POM, Intellij elimina la extensión .war de mi artefacto explotado en la configuración del directorio de salida de la Estructura del proyecto. Esto causa un error en la configuración Ejecutar / Depurar de Intellij:
El artefacto ''XXXX: la guerra explotó'' tiene una extensión inválida.
Para resolver el problema, debo anular manualmente la configuración del directorio de salida de la Estructura del proyecto. Cada vez que hago el cambio más pequeño en el POM, debo volver a la configuración del directorio de salida y añadir manualmente ".war" al final de la configuración del directorio de salida. Esto se está volviendo muy viejo y frustrante.
Por ejemplo, debo cambiar esto:
E: / workarea / enterp / application / target / application
a esto:
E: / workarea / enterp / application / target / application.war
Si configuro manualmente la configuración de outputDirectory del complemento WAR de Maven de la siguiente manera, esto no ayuda en absoluto:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<!-- Output directory of artifact:war exploded keeps losing the .war extension -->
<outputDirectory>${project.build.directory}.war</outputDirectory>
</configuration>
</plugin>
¿Como puedo resolver este problema?
EDITAR:
Aquí está la configuración de construcción completa:
<build>
<!-- Maven will append the version to the finalName (which is the name
given to the generated war, and hence the context root) -->
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- Compiler plugin enforces Java 1.6 compatibility and activates annotation
processors -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<!-- Output directory of artifact:war exploded keeps losing the .war extension -->
<outputDirectory>${project.build.directory}/${project.artifactId}.war</outputDirectory>
<!-- Java EE 7 doesn''t require web.xml, Maven needs to catch up! -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<!-- The WildFly plugin deploys your war to a local WildFly container -->
<!-- To use, run: mvn package wildfly:deploy -->
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${version.wildfly.maven.plugin}</version>
</plugin>
</plugins>
</build>
SEGUNDA EDICIÓN:
Descubrí que una solución es agregar ".war" a $ {project.artifactId} en la configuración de compilación, por ejemplo:
<finalName>${project.artifactId}.war</finalName>
y elimine outputDirectory de la configuración del complemento. Así que la configuración de compilación debería verse así:
<build>
<!--
Maven will make finalName the name of the generated war.
NOTE: Output directory of artifact:war exploded keeps losing the .war extension
http://youtrack.jetbrains.com/issue/IDEA-86484
http://youtrack.jetbrains.com/issue/IDEA-95162
The solution is to append ".war" to ${project.artifactId}, below:
-->
<finalName>${project.artifactId}.war</finalName>
<plugins>
<!-- Compiler plugin enforces Java 1.6 compatibility and activates annotation
processors -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<!-- Java EE 7 doesn''t require web.xml, Maven needs to catch up! -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<!-- The WildFly plugin deploys your war to a local WildFly container -->
<!-- To use, run: mvn package wildfly:deploy -->
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${version.wildfly.maven.plugin}</version>
</plugin>
</plugins>
</build>
DESCARGO DE RESPONSABILIDAD: Si usa esta solución, tenga en cuenta que cuando implemente un artefacto WAR sin explotar, el nombre del archivo se llamará XXXX.war.war. Funciona: implementé el artefacto como un archivo WAR en Intellij, pero es feo.
INFO [org.jboss.as.server.deployment] (subproceso del servicio MSC 1-7) JBAS015876: inicio de implementación de "XXXX.war.war" (nombre-tiempo de ejecución: "XXXX.war.war)"
Si alguien me puede decir cómo configurar el proyecto Intellij para que trabaje con Maven para seleccionar uno u otro valor finalName, dependiendo de si estoy implementando un archivo WAR o un artefacto explotado, entonces esta pregunta será respondida suficientemente.
<!-- Exploded artifact -->
<finalName>${project.artifactId}.war</finalName>
<!-- WAR file (unexploded) artifact -->
<finalName>${project.artifactId}</finalName>
Creo que es lo mismo que esta pregunta: IntelliJ Artifact tiene una extensión no válida
Agregue una extensión .war al directorio de salida como se muestra en mi respuesta: https://.com/a/25569266/968988
En realidad, debe dejar solo el atributo finalName
, de lo contrario obtendrá los problemas que describe. En su lugar, debe cambiar la configuración para que el plugin maven war use el webappDirectory
aplicaciones webappDirectory
esta manera:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>${project.build.directory}/${project.artifactId}.${project.packaging}</webappDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
Hay una manera de solucionar esto en IntelliJ, sin cambiar su (s) archivo (s) pom.xml, agregando un artefacto con una referencia a la guerra explotada (o en mi caso, la oreja explotada) y no se pisoteará cada vez IntelliJ reimporta los pom (s) maven. Así es cómo:
Detener / anular el despliegue de su despliegue actual de artefactos
Edite la configuración de ejecución y, en la pestaña Implementación, elimine el artefacto actual de war / ear explotado
Abra la configuración de Artefactos del proyecto y agregue un nuevo artefacto
Use el botón más para agregar una nueva guerra o (en mi caso) artefacto de oreja explotada
Asígnele un nombre y luego edite el directorio de salida para agregar la extensión apropiada (.war o .ear)
En la sección Diseño de salida donde ve
<output root>
, use el botón más para agregar un artefactoSeleccione el artefacto explotado deseado
Edite nuevamente la configuración de ejecución y, en la pestaña Implementación, agregue el nuevo artefacto explotado de solución alternativa
Gracias a Nikolay Chashnikov por describir esto en su comentario sobre el informe de error
Si estamos hablando de WAR dentro de EAR, hay otra manera de resolver su problema usando la configuración correcta dentro de maven-ear-plugin. WAR pom.xml debe dejarse como está, sin ningún cambio, pero EAR pom.xml debería contener algo como esto. (por favor, preste atención a <unpack> $ {unpack.wars} </unpack> )
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.9</version>
<configuration>
<version>6</version>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<generateApplicationXml>false</generateApplicationXml>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
<modules>
<webModule>
<groupId>com.test.app</groupId>
<artifactId>test-app-war</artifactId>
<unpack>${unpack.wars}</unpack>
</webModule>
</modules>
</configuration>
</plugin>
y luego puede agregar perfiles predeterminados y depurar el ensamblaje de artefactos adecuado.
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<unpack.wars>false</unpack.wars>
</properties>
</profile>
<profile>
<id>debug</id>
<activation>
<property>
<name>debug</name>
</property>
</activation>
<properties>
<unpack.wars>true</unpack.wars>
</properties>
</profile>
</profiles>
use el perfil de depuración dentro de IntelliJ IDEA para expandir las guerras y el perfil predeterminado para crear artefactos en la línea de comandos o CI (el perfil predeterminado estaría activo si no se proporcionara un perfil, por lo que su compilación funcionará como antes).
Con esta solución, HotSwap y las actualizaciones de recursos funcionan como se espera.
Espero que esto ayude.