2013-08-01 10 views
12

Ich bin an einem Projekt arbeiten, die JAAS verwendet und leider für mich Tomcat erfordert eine Datei in einem Ordner META-INF in der Wurzel des Krieges gestellt werdenMaven Krieg hat META-INF-Ordner an zwei Stellen

app.war 
    |__META-INF 
    | |___context.xml 
... 

Ich denke, dass es bereits seltsam ist, da der Standard-META-INF-Speicherort für WAR's in den Klassenordnern ist.

app.war 
    |__WEB-INF 
    | |__classes 
    |   |__META-INF 
... 

Ich verwende Maven Also, in dem es heißt, dass alles in src/main/resources/META-INF wird an die entsprechende Stelle kopiert werden, was es tut. Das Seltsame ist, dass es auch einen META-INF-Ordner im Wurzelverzeichnis der Dateistruktur erstellt und mir 2 META-INF-Ordner gibt.

Projektstruktur

app 
    |__src/main/java 
    |__src/main/resources 
    |  |__META-INF 
    |    |__context.xml 
... 

Nach mvn Paket

app 
    |__META-INF [1] 
    |__WEB-INF 
    |  |__classes 
    |   |__META-INF [2] 
    |     |__context.xml 
... 

Also, wenn der Krieg Standard besagt, dass META-INF unter Klassen-Ordner sein sollte, wie in # 2, warum Maven War erstellt den # 1-Ordner. Und gibt es eine Möglichkeit, Dateien anstelle von # 2 in diesen Ordner zu kopieren?

Grüße

Antwort

11

So fand ich diese:

Two Meta-Inf folders - normal structure?

, die das 2 mit besagt META-INF-Ordner ist kein Problem. Graben ein wenig ich gefunden:

JAR File Specification

dem es heißt, über den Ordner META-INF:

Eine JAR-Datei im Wesentlichen eine Zip-Datei ist, die eine optionale META-INF-Verzeichnis enthält. ... Das Verzeichnis META-INF, falls vorhanden, wird zum Speichern von Paket- und Erweiterungskonfigurationsdaten verwendet, einschließlich Sicherheit, Versionierung, Erweiterung und Dienste.

und diese:

JSR-000315 JavaTM Servlet 3.0

, die auf Abschnitt 10.6, heißt es über die WAR-Datei-Struktur:

Wenn in einer solchen Form verpackt, ein META-INF Verzeichnis vorhanden sein, die enthält Informationen nützlich für Java-Archiv-Tools. Dieses Verzeichnis darf nicht direkt als Inhalt von dem Behälter als Reaktion auf eine Anfrage des Web-Client bedient, obwohl seine Inhalte sind sichtbar Code über die getResource und getResourceAsStream fordert die ServletContext Servlet. Alle Anfragen zum Zugriff auf die Ressourcen im Verzeichnis META-INF müssen mit einer SC_NOT_FOUND (404) -Antwort zurückgegeben werden.

So aus der WAR-Spezifikation ist der richtige Ort WEB-INF/Klassen/META-INF.Da es sich bei War jedoch um eine spezielle JAR-Datei handelt, ist es sinnvoll,/META-INF als Erweiterungspunkt zu verwenden. Man kann solche unterschiedlichen Verwendungen in JPA persistence.xml gegenüber Tomcat context.xml Dateien sehen: Ersterer sollte in WEB-INF/classes/META-INF platziert werden, letzterer in/META-INF.

+0

Eine .war-Datei ist eine .jar-Datei, daher kann sie wie die JAR-Datei ein META-INF-Verzeichnis enthalten. – Hong