2012-11-05 6 views
6

Mam aplikację internetową Java, w której mam kilka folderów w standardowym katalogu źródłowym aplikacji webapp (src/main/webapp), których nie chcę kopiować do wojna (exploded lub packaged).Jak wykluczyć pliki, które mają być kopiowane, przez maven, do wybuchu wojny

Jednym z powodów, dla których nie chcę kopiować tych plików, jest to, że uruchamiamy kompresor YUI JS & w plikach .js i .css w czasie wojny eksplodowanej. Pliki, które chcę wykluczyć, generują błędy podczas fazy kompresji. Innym powodem, dla którego nie chcę, aby włączyli się do wojny, jest to, że wspierają testowanie aplikacji JS na jednej stronie, która funkcjonuje w aplikacji internetowej (są to skrypty testowe JS po stronie klienta, które polegają na node/angular.js).

Poniżej znajdują się odpowiednie sekcje z POM.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <configuration> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <overlays> 
     </overlays> 
     <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
     </configuration> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Próbowałem bezskutecznie użyć warSourceExcludes wykluczyć pewne ścieżki, ale bezskutecznie. Przykładem mojego użytkowania przedstawiono poniżej, gdzie client/ jest folder bezpośrednio pod src/main/webapp:

<configuration> 
    ... 
    <warSourceExcludes> 
    <excludes> 
     <exclude> 
     client/ 
     </exclude> 
    </excludes> 
    </warSourceExcludes> 
    ... 
</configuration> 

Co to jest poprawny sposób, aby wykluczyć pewne ścieżki, i czy poszczególne pliki w katalogu web app źródłowego z wchodzących w wybuchła wojna?

UPDATE

Opierając się na sugestię ze @maba I zaktualizowaną konfigurację następująco:

<configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays>         
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
</configuration> 

Folder, client/, nadal jest uzyskiwanie skopiowane. Jakieś pomysły?

+1

warSourceExcludes jest udokumentowana jako ciąg oddzielonych przecinkami, więc nie powinno być żadnych XML tam . http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html –

+0

pytanie zostało zaktualizowane, aby odzwierciedlić poprawne użycie - nadal nie działa dla mnie. – Kris

+0

Podejrzewam, że istnieje kolejny problem z moim 'pom.xml'. Sprawdzę, czy w tych tygodniach z nieskazitelnym projektem wygenerowanym przez archetyp – Kris

Odpowiedz

6

Dzięki @alexksandr & @maba za odpowiedzi - które, choć poprawne, nie rozwiązały w pełni mojego problemu.

Rozwiązaniem wydaje się być - choć nie jestem do końca pewny, dlaczego tak jest - że sekcja konfiguracji nie jest pobierana, gdy jest umieszczona w sekcji execution.

Biorąc moje oryginalne pom.xml i ponownie faktoringu to, że praca daje:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays> 
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
    </configuration> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Ważną szczegół wydaje się, że konfiguracja powinna być na najwyższym poziomie wtyczki, a nie w sekcji execution - choć wyraźnie xml w moim Pierwsza próba użycia warSourceExcludes była droga od celu (zobacz oryginalne pytanie przed sekcją aktualizacji).

+0

Tak właśnie działają pluginy testowe. Mają albo konfigurację zobowiązaną do wykonania w konfiguracji kompilacji ** lub ** dla wykonania wiersza poleceń. Spójrz na przykład na ['zależność od mavenów] (https://maven.apache.org/plugins/maven-dependency-plugin/usage.html). Jest dość specyficzne, że różnią się dwie części konfiguracji. Twoje wymagania nie były całkowicie jasne. Ale miło, że masz teraz działającą konfigurację. – maba

+0

dziękuję za wyjaśnienia - i apollogie, jeśli nie opisałem tego problemu poprawnie (prawdopodobnie ze względu na to, że tak naprawdę nie otrzymałem dokładniejszych informacji o maven). Ale dzięki znowu maba @aleksandr za pomoc! – Kris

+0

Jeśli nasze odpowiedzi były przydatne/pomocne, to je przegłosuj. I zaakceptuj własną odpowiedź, jeśli uważasz, że jest to najlepsze rozwiązanie. – maba

1

Twoja warSourceExcludes jest nieprawidłowa. Oto co mówi maven-war-plugin dotyczące warSourceExludes:

Przecinek oddziela listę tokenów wykluczyć podczas kopiowania zawartości warSourceDirectory.

Więc w twoim przypadku to właśnie konfiguracja powinna wyglądać następująco:

<configuration> 
    ... 
    <warSourceExcludes>client/</warSourceExcludes> 
    ... 
</configuration> 

Oznacza to również, że jeśli chcesz dodać trochę więcej wyklucza, wystarczy dodać je oddzielić przecinkami:

<configuration> 
    ... 
    <warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes> 
    ... 
</configuration> 
+0

Cześć, dziękuję za odpowiedź. po prostu wypróbowałem twoją sugestię bez powodzenia, Will zaktualizuje moje pytanie, by dołączyć to, co próbowałem. dzięki – Kris

+0

Próbowałem z twoją instalacją i dostałem folder w 'cel', który kończy się na' -work' iw tym folderze nie ma znaku katalogu 'client'. – maba

+0

Czy chcesz stworzyć wojnę z tym samym układem? A może wojna wybuchowa to jedyny rezultat, jakiego pragniesz? – maba

1

aby wykluczyć wszystkie pliki z folderu użycia symboli wieloznacznych tak client/**

<configuration> 
<failOnMissingWebXml>false</failOnMissingWebXml> 
<overlays> 
</overlays>         
<webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
<warSourceExcludes>client/**</warSourceExcludes> 
</configuration> 
2

mogłem znaleźć żadnej konfiguracji < warSourceExcludes> który pracował jednak < packagingExcludes> zrobił praca:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
     <packagingExcludes>excludeMe/**</packagingExcludes> 
    </configuration> 
    </plugin> 
+0

To rozwiązało mój problem z minify-maven-plugin, który utrzymywał połączone pliki w mojej .war, nawet przy użyciu . – Cesar

+0

należy zauważyć, że "packagingExcludes' wyklucza tylko z pliku' .war', a nie z folderu rozbitego – jediz

Powiązane problemy