2009-08-19 5 views
38

Ich habe ein sehr einfaches WAR-Projekt und ich möchte ein Verzeichnis mit dem Namen META-INF an der Spitze der Klassen Ausgabeordner, wo alle kompilierten Java-Klassen sind. Ich benutze Maven, aber es scheint, dass Maven standardmäßig nichts enthält, das keine Java-Klasse ist. So ignoriert es mein Verzeichnis META-INF, das an der Spitze des Verzeichnisses src sitzt. Das Verzeichnis META-INF enthält eine Datei mit dem Namen persistence.xml. Gibt es einen schnellen Hinweis darauf, wie man Maven anweist, dieses Verzeichnis und diese Datei in den Ausgabeordner zu stellen?Maven: Einen Ordner META-INF in den Klassenordner aufnehmen

+1

Große Frage, danke. –

Antwort

11

Maven möchte diese Art von Informationen im Ressourcenordner. Weitere Informationen finden Sie unter here.

Weitere Informationen zu Ressourcenverzeichnissen finden Sie unter here.

4

Ich werde Ihre Frage indirekt beantworten, indem ich sage, dass wenn Sie bereits den Sprung zu Maven2 gemacht haben, ich definitiv das Archetype-Plugin empfehlen würde. Durch die Verwendung des Archetyps webapp wird sichergestellt, dass Sie eine kanonische Verzeichnisstruktur erhalten. Jeder andere, der sich Ihre Quelle ansieht, weiß sofort, wo alles ist und es wird keine Frage geben, wohin Ihre Dateien gehen.

81

Im Allgemeinen sollten für ein Java-basiertes Maven-Projekt Nicht-Quelldateien in das Unterverzeichnis src/main/resources des Projekts verschoben werden. Der Inhalt dieses Verzeichnisses resources wird in das Ausgabeverzeichnis (standardmäßig target/classes) während der Phase der Prozessressourcen kopiert.

Bei Projekten Maven IST ist es etwas komplizierter: Es gibt auch das src/main/webapp Verzeichnis, bei Maven WEB-INF/web.xml zu finden erwartet. Um Ihre WAR-Datei zu erstellen, muss diese Datei existieren. Andernfalls erhalten Sie eine Fehlermeldung wie diese:

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) 

Da das WEB-INF Verzeichnis unter src/main/webapp vorhanden sein muss, würde ich empfehlen, es wieder definieren, in src/main/resources zu vermeiden. Obwohl dies absolut korrekt ist und der Inhalt der beiden Verzeichnisse zusammengeführt wird, kann es verwirrend sein, wenn in beiden Dateien eine Datei definiert ist. Der Inhalt von src/main/resources hat Vorrang, da sie über den Anfang des Inhalts von src/main/webapp kopiert werden.

+2

Ich liebe dich Mann! – willcodejavaforfood

+1

Dein Beitrag löst meinen Fehler! Vielen Dank! Auf für dich! –

+0

Also meins, gute Job-Kumpel – myro

0

Geben Sie den unten stehenden Eintrag in pom.xml

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <configuration> 
        <!--webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory--> 
        <packagingExcludes>**/web.xml</packagingExcludes> 
       </configuration> 
      </plugin> 
4

dies in pom.xml Put:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
+3

Sie sollten einen Meta-Text hinzufügen – keyser

Verwandte Themen