2013-04-18 15 views
6

Jest łatwy w użyciu org.apache.maven.plugins:maven-antrun-plugin do kopiowania zasobów i zmiany ich nazwy, ale czy istnieje sposób inteligentnego zastosowania symboli wieloznacznych lub innych mechanizmów, aby dostosować reguły osobowe?Wtyczka Maven and Ant do inteligentnego kopiowania zasobów

Na przykład jeśli mam te pliki:

  • ${project.artifactId}-${project.version}.swf
  • a.swf
  • b.swf
  • ...
  • z.swf

chciałbym skopiować wszystkie te pliki w katalogu i zmień tylko nazwę ${project.artifactId}-${project.version}.swf na foo.swf. Wiem, że mogę używać:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
     <executions> 
      <execution> 
      <id>copy-swf-files</id> 
      <phase>compile</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <target name="copy swf files to web project"> 
         <copy file="${project.build.directory}/${project.artifactId}-${project.version}.swf" tofile="${swf.output.location}/foo.swf" /> 
         <copy file="${project.build.directory}/a.swf" tofile="${swf.output.location}/a.swf" /> 
         <copy file="${project.build.directory}/z.swf" tofile="${swf.output.location}/z.swf" /> 
        </target> 
       </configuration>      
       </execution> 
      </executions> 
    </plugin> 

to praca, ale jest tam inny wygodny sposób, aby to zrobić, bo jeśli mam 1000 pliki do skopiowania, to będzie bardzo nudny ... Dzięki

Odpowiedz

1

Używaj maven montaż -plugin z deskryptorem złożenia "dir" "formats/format", "fileSets/fileSet", który skopiuje większość plików swf z wyłączeniem specjalnego pliku swf, oraz "pliki/pliki", które skopiują ten plik SWF do pliku o różnych Nazwa.

+0

Cześć. Widziałem w Google, że mogę używać tej wtyczki, ale postanowiłem użyć wtyczki Ant, aby to zrobić, ponieważ nigdy nie używam tej wtyczki ^^.+1 tak czy inaczej, będę studiować tę wtyczkę tak szybko jak to możliwe –

+0

Ilekroć widzę antrun w pom.xml, jest to dobry sygnał, że coś jest nie tak. –

15

Czy znasz Ant? Wszystko co robi wtyczka Maven Ant, to wywoływanie Anta z zadaniami, które wymieniasz. Można to zrobić żadnej Ant zadanie tym <taskdef> itd

jak to wygląda robisz można zrobić z zestawu plików:

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="*.swf"/> 
    </fileset> 
</copy> 

Spowoduje to skopiowanie wszystkich *.swf pliki znajdujące się bezpośrednio pod w ${project.build.directory} (i bez podkatalogów) do katalogu ${swf.output.location}. Jeśli chcesz skopiować całe drzewo katalogów *.swf plików, wystarczy zmienić <include>:

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE--> 
    </fileset> 
</copy> 

jeśli trzeba munge nazwy plików, można użyć Mappers. Najprostszym odwzorowujący byłoby Spłaszczenie odwzorowujący:

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE--> 
    </fileset> 
    <mapper type="flatten"/> 
</copy> 

Spowoduje to skopiowanie całego drzewa katalogów i spłaszczyć wszystkie pliki w jednym katalogu. Istnieją twórcy map, którzy mogą dopasować globusy, wyrażenia regularne, a nawet skrypty.

Numer <include> to selector, a nie program odwzorowujący, ponieważ wybiera pliki, na które chcesz działać. Te również mogą być dość skomplikowane i możesz dopasować plik na podstawie nazw własnych wyrażeń regularnych, a nawet ich zawartości.

Jestem zaskoczony, że nie ma wtyczki Maven, która pozwala to zrobić.

+0

hmm dziękuję za ten link, myślę, że 'regexpselect' uratuje mnie. W przypadku maven istnieje cel 'copy-resources', ale uważam, że nie możemy zmienić nazwy plików, wystarczy je skopiować. Zgodnie z sugestią Stevo Slavića, istnieje maven-assembly-plugin, ale jeszcze go nie używałem. –

+0

@OlivierJ. Naprawdę nie widziałem, żebyś zmienił nazwy plików w twoim przykładzie. Wystarczy skopiować kilka plików z jednego katalogu do drugiego. A tak przy okazji, czy miałeś na myśli program odwzorowujący "regexp"? –

+0

wystarczy sprawdzić pierwszą linię kopiowania, zmieniam tofile ".../foo.swf" –

2

Ok I wreszcie stosować tej wtyczki, aby to zrobić:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
     <id>copy-swf-files</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     <target name="copy swf files to web project">  
      <copy todir="${swf.output.location}"> 
       <fileset dir="${project.build.directory}" includes="*.swf"> 
        <filename regex="^sim-flex.*"/> 
       </fileset> 
      <mapper type="regexp" from=".*" to="sim.swf"/> 
      </copy> 
      <copy todir="${swf.output.location}" > 
       <fileset dir="${project.build.directory}" includes="*.swf"> 
        <not> 
         <filename regex="^sim-flex.*"/> 
        </not>         
       </fileset> 
      </copy> 
     </target> 
     </configuration>      
    </execution> 
</executions> 
</plugin> 
+0

Czy ta wtyczka może skopiować pliki na zdalny serwer? – zygimantus

Powiązane problemy