webentwicklung-frage-antwort-db.com.de

Warum fehlt das Maven-War-Plugin für web.xml, wenn ich es so konfiguriert habe, dass es bei fehlender web.xml nicht fehlschlägt?

Hier ist eine Herausforderung: Warum schlägt dieser Build fehl?

Ich habe Mavens Maven-War-Plugin so konfiguriert, dass es in einer nicht vorhandenen web.xml-Datei nicht fehlschlägt.

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

Aber trotz dieser Konfiguration scheitert es immer wieder wie folgt:

[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]

Ich habe die web.xml eigentlich nicht, also brauche ich sie, um den Krieg ohne sie zusammenzustellen.

Ich habe versucht, einen falschen <webXml>none</webXml> in die Konfiguration einzufügen, aber das hat nichts geändert ...

Was vermisse ich?

9
Edy Bourne

Die Ausführungs-ID im POM lautet prepare-war. Maven führt eine eigene Standardausführung des War-Plugins für Projekte mit dem Verpackungstyp war aus. Die Standardausführung hat die ID default-war. Da das POM derzeit konfiguriert ist, wird das war-Ziel zweimal ausgeführt.

Wenn Sie sich die Fehlermeldung ansehen:

[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]

Möglicherweise wird die Ausführungs-ID in Klammern (default-war) angezeigt. Wenn Sie die Ausführungs-ID in default-war ändern, wird Ihr Problem beseitigt UND Sie haben keine zwei Ausführungen des Kriegsziels mehr.

6
user944849

Das sollte funktionieren:

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

Bitte beachten Sie, dass der <failOnMissingWebXml>false</failOnMissingWebXml>-Bereich anstelle der Ausführung in die Plugin-Konfiguration verschoben wurde.

10
Jorge_B

Das Problem hängt mit der Version zusammen, mit der Sie gerade arbeiten. Sie müssen Ihr lokales Repository und die bereits heruntergeladene Version sehen. Gehen Sie zu Ihrem .m2-Ordner und suchen Sie nach 

.m2\repository\org\Apache\maven\plugins\maven-compiler-plugin

In diesem Ordner können Sie die für Sie verfügbaren Versionen sehen.

Ändern Sie die Version für die Version, die Sie in Ihrem Ordner haben, und es funktioniert!

0