2013-04-26 7 views
6

mam nowego do Maven i staram się tworzyć pom.xml zbudować pliki wojna o odmiennym środowisku przy użyciu profiliJak mogę utworzyć profil kompilacji Maven, aby warunkowo kopiować pliki?

Stworzyłem więc cel build

<build> 
<finalName>myacct_okc</finalName> 
<resources> 
    <resource> 
    <directory>src/main/java</directory> 
    <excludes> 
     <exclude>**/*.java</exclude> 
    </excludes> 
    </resource> 
    <resource> 
    <directory>src/main/resources</directory> 
    </resource> 
    <resource> 
    <directory>config/${environment}</directory> 
    </resource> 
</resources> 
</build> 

A potem stworzył profili dla każdego środowiska

<profiles> 
<profile> 
    <id>local</id> 
    <activation> 
    <activeByDefault>false</activeByDefault> 
    </activation> 
    <properties> 
    <environment>local</environment> 
    </properties> 
</profile> 
<profile> 
    <id>jboss</id> 
    <properties> 
    <environment>jboss</environment> 
    </properties> 
</profile> 
<profile> 
    <id>dev</id> 
    <properties> 
    <environment>dev</environment> 
    </properties> 
</profile> 

i utworzyć folder config dla każdego ENV

project root 
|-- src 
| |-- main 
| | |-- java 
| | |-- resources 
| | | |-- config.xml 
| | | +-- config.properties 
| | |-- webapp 
| | | |-- META-INF 
| | | | +--context.xml 
| | |-- config 
| | | |-- local 
| | | | |--config.properties 
| | | | +--config.xml 
| | | |-- jboss 
| | | | |--config.properties 
| | | | +--config.xml 
| | | +-- dev 
| | | | |--config.properties 
| | | | +--config.xml 
+--pom.xml 

Teraz po uruchomieniu tego pom.xml z dowolnym profilem np. jboss, pliki w folderze config/jboss nie są kopiowane (lub mam na myśli, że pliki w src/main/resources nie są zastępowane).

po włączeniu debugowania na komputerze maven kompilacji widzę, że kopia jest wykonywana.

[DEBUG] resource with targetPath null 
directory C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss 
excludes [] 
includes [] 
[DEBUG] ignoreDelta true 
[INFO] Copying 2 resources 
[DEBUG] file config.xml has a filtered file extension 
[DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\config.xml to C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\config.xml 
[DEBUG] file config.properties has a filtered file extension 
[DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\META-INF\config.properties to C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\META-INF\config.properties 

Ale to nie zastępuje plików. Pliki są nadal takie same, jak w src/main/resources.

wersja

Maven jest 3.0.4

Czy ktoś może mi pomóc, co robię źle?

Przyjrzałem się temu question. Zapewnia to rozwiązanie, ale chcę zastąpić pliki, a następnie je wyłączyć, a następnie skopiować.

+0

Jest to kolejny prosty przykład z Maven: http://maven.apache.org/guides/mini/guide-building-for-different- environments.html – Lunf

Odpowiedz

6

To działało po dodaniu filtering= true

<build> 
<finalName>myacct_okc</finalName> 
<resources> 
<resource> 
    <directory>src/main/java</directory> 
    <excludes> 
    <exclude>**/*.java</exclude> 
    </excludes> 
</resource> 
<resource> 
    <filtering>true</filtering> 
    <directory>src/main/resources</directory> 
</resource> 
    <resource> 
    <filtering>true</filtering> 
    <directory>config/${environment}</directory> 
    </resource> 
    </resources> 
</build> 
+5

filtrowanie zamienia $ (coś) w plikach z wartościami właściwości maven –

7

Wierzę, że będziesz musiał dodać swoje zasoby do wtyczki maven-resources, w ramach wykonywania kopii zasobów.

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>copy-config</id> 
     <phase>copy-resources</phase> 
     <goals> 
     <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     <resources> 
      <resource> 
      <directory>src/main/java</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
      </resource> 
      <resource> 
      <directory>src/main/resources</directory> 
      </resource> 
      <resource> 
      <directory>config/${environment}</directory> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+0

nie używamy wtyczki maven-resources – NullPointerException

+4

Możesz nie używać jej bezpośrednio w POM, ale jest to rdzeniowa wtyczka Maven i jest ona domyślnie używana podczas cyklu życia kompilacji. Konfiguracja wtyczki jest sposobem na pobranie wtyczki do kopiowania zasobów z niestandardowych lokalizacji źródłowych. – bdkosher

+0

Absolutny ratownik! Myślałem o tym w kwestii zmiany nazwy w oparciu o profil, ale nie mogłem wymyślić, jak to zrobić. To jest o wiele bardziej eleganckie. Dzięki –