Frage

Ich habe ein Maven-Krieg Projekt, das webapp.war produziert und ein Maven ‚Haut‘ Projekt, das skin.zip (eine Datei volle Ressourcen und XML-Dateien) erzeugt. Jetzt möchte ich diese Zip-Datei als Servletkontext Ressource hinzufügen (zum Beispiel WEB-INF / skin.zip).

habe ich versucht, Overlays, aber es erweitert die Zip-Datei in WEB-INF anstelle der Platzierung der nicht erweiterten Datei gibt:

    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
            <overlays>
                <overlay>
                    <groupId>com.mycompany</groupId>
                    <artifactId>skin</artifactId>

                    <type>zip</type>
                    <targetPath>WEB-INF</targetPath>
                </overlay>
            </overlays>
        </configuration>
    </plugin>

Gibt es eine Möglichkeit, es zu verhindern, dass die Ressource erweitern - oder Stick irgendwie die Datei dort (ohne Verwendung von ant-Plugin).

Hinweis: type ist völlig unnötig und wenig hilfreich Konfigurationselement - es erzählt nicht das Plugin wie das Artefakt zu erweitern, wie man erwarten könnte - es sagt es, wie man FIND es. Wenn Sie zum Beispiel Typen von zip jar ändern, beklagt es, dass es nicht das Artefakt finden (in den meist wenig hilfreich wie möglich).

War es hilfreich?

Lösung

Ich habe versucht, Overlays, aber es erweitert die Zip-Datei in WEB-INF

Ja, das ist es, was Overlays tun, ist der Inhalt entpackt mit dem Krieg zusammengeführt werden. Das ist einfach nicht das richtige Werkzeug in Ihrem Fall.

Gibt es eine Möglichkeit, es zu verhindern, dass die Ressource erweitern - oder irgendwie hält die Datei dort

Ich würde verwenden, um die Maven Dependency Plugin und seine dependency:copy Ziel:

  • dependency:copy nimmt eine Liste von Artefakten in der Plugin-Konfigurationsabschnitt definiert und kopiert sie an einen bestimmten Ort, Umbenennen sie oder Abstreifen der Version, falls gewünscht. Dieses Ziel kann die Artefakte von Remote-Repositories beheben, wenn sie in der lokalen nicht existieren.

Und bindet es auf der prepare-package Phase. Im Folgenden einiger Ausgangspunkt:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-prepare-package</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>com.mycompany</groupId><!-- or ${project.groupId} -->
                  <artifactId>skin</artifactId>
                  <version>X.Y.Z</version><!-- or ${project.version} -->
                  <type>zip</type>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Siehe Kopieren bestimmte Artefakte weitere Beispiele.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top