Voici un défi: pourquoi cette version échoue-t-elle?
J'ai configuré le plugin maven-war-plugin de Maven pour ne pas échouer sur un fichier web.xml complet, il semble:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>prepare-war</id>
<phase>prepare-package</phase>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archiveClasses>false</archiveClasses>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix />
</manifest>
<manifestEntries>
<Implementation-Build>${build.number}</Implementation-Build>
<Implementation-Title>${project.name}</Implementation-Title>
<Built-By>${user.name}</Built-By>
<Built-OS>${os.name}</Built-OS>
<Build-Date>${build.date}</Build-Date>
</manifestEntries>
</archive>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>./target/dist</directory>
</resource>
</webResources>
</configuration>
</execution>
</executions>
</plugin>
Mais malgré cette configuration, il continue à échouer de la manière suivante:
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
En fait, je n'ai pas le fichier web.xml, donc j'en ai besoin pour organiser la guerre sans ce dernier.
J'ai essayé d'ajouter un <webXml>none</webXml>
faux dans la configuration, mais cela n'a rien changé ...
Qu'est-ce que je rate?
L'ID d'exécution dans le POM est prepare-war
. Maven exécute sa propre exécution par défaut du plug-in war pour les projets de type d'emballage war
. L'exécution par défaut a l'ID default-war
. Comme le POM est actuellement configuré, l’objectif war
est exécuté deux fois.
Si vous regardez le message d'erreur:
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
Vous pouvez voir l'ID d'exécution qui échoue entre parenthèses (default-war)
. Si vous modifiez l'ID d'exécution en default-war
, votre problème disparaîtra ET vous n'aurez plus deux exécutions de l'objectif de guerre en cours d'exécution.
Cela devrait fonctionner:
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
<executions>
<execution>
<id>prepare-war</id>
<phase>prepare-package</phase>
<configuration>
<archiveClasses>false</archiveClasses>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix />
</manifest>
<manifestEntries>
<Implementation-Build>${build.number}</Implementation-Build>
<Implementation-Title>${project.name}</Implementation-Title>
<Built-By>${user.name}</Built-By>
<Built-OS>${os.name}</Built-OS>
<Build-Date>${build.date}</Build-Date>
</manifestEntries>
</archive>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>./target/dist</directory>
</resource>
</webResources>
</configuration>
</execution>
</executions>
</plugin>
Veuillez noter que la section <failOnMissingWebXml>false</failOnMissingWebXml>
a été déplacée vers la configuration du plugin plutôt que vers l'exécution.
Le problème est lié à la version que vous utilisez actuellement. Vous devez voir votre référentiel local et voir la version que vous avez déjà téléchargée. Allez dans votre dossier .m2
et cherchez
.m2\repository\org\Apache\maven\plugins\maven-compiler-plugin
Dans ce dossier, vous pouvez voir les versions disponibles.
Changez la version de la version que vous avez dans votre dossier et ça marche!