2009-08-19 11 views
38

Mam bardzo prosty projekt WAR i chcę umieścić katalog o nazwie META-INF u góry folderu wyjściowego klasy, w którym znajdują się wszystkie skompilowane klasy Java. Używam Mavena, ale wygląda na to, że domyślnie Maven nie będzie zawierał niczego, co nie jest klasą Java. Więc ignoruje mój katalog META-INF, który znajduje się na szczycie katalogu src. Katalog META-INF zawiera plik o nazwie persistence.xml. Jakieś szybkie wskazówki, jak instruować Mavena, aby umieścił ten katalog i plik w folderze wyjściowym?Maven: Włączenie folderu META-INF do folderu klas

+1

wielkie pytanie, dzięki. –

Odpowiedz

11

Maven chce tego typu informacji w folderze zasobów. Aby uzyskać więcej informacji, patrz here.

Project 
|-- pom.xml 
`-- src 
    `-- main 
     |-- java 
     `-- resources 

Dla określając dodatkowe katalogi zasobów, zobacz here.

4

Będę pośrednio odpowiadać na twoje pytanie, mówiąc, że jeśli już zrobiłeś skok do Maven2 zdecydowanie polecam użycie Archetype Plugin. Korzystanie z archetypu webapp zapewni, że skończysz z kanoniczną strukturą katalogów. Każdy, kto spogląda na twoje źródło, natychmiast wie, gdzie jest wszystko i nie będzie żadnych wątpliwości, gdzie znajdują się twoje pliki.

81

Ogólnie rzecz biorąc, w przypadku projektu Maven opartego na języku Java pliki niebędące źródłami powinny znajdować się w podkatalogu projektu src/main/resources. Zawartość tego katalogu resources jest kopiowana do katalogu wyjściowego (domyślnie target/classes) podczas fazy procesu procesu-zasobów.

W przypadku projektów Maven WAR jest to nieco bardziej skomplikowane: istnieje również katalog src/main/webapp, w którym Maven spodziewa się znaleźć WEB-INF/web.xml. Aby skompilować plik WAR, plik ten musi istnieć; inaczej, zobaczysz komunikat o błędzie, jak poniżej:

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

jako katalog WEB-INF musi istnieć pod src/main/webapp, polecam unikanie określając ją ponownie w src/main/resources. Chociaż jest to całkowicie poprawne, a zawartość obu katalogów zostanie scalona, ​​może to być mylące, jeśli plik jest zdefiniowany w obu. Zawartość src/main/resources będzie miała pierwszeństwo, ponieważ zostaną skopiowane na wierzch zawartości z src/main/webapp.

+2

Kocham cię, człowieku! – willcodejavaforfood

+1

Twój post rozwiązać mój błąd! Dzięki! Dla Ciebie! –

+0

Tak więc mój, dobry przyjaciel, kumpel – myro

0

Daj poniższy wpis w 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

Włóż to do pom.xml:

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

Powinieneś dodać trochę meta-tekstu – keyser