2010-11-23 12 views
22

Ich versuche, Maven zu verwenden, um alle * .xsd-Dateien, die in einem bestimmten Ordner enthalten sind, in einen anderen Ordner zu verschieben, aber ohne die Quellverzeichnisstruktur. DieseMaven: Kopieren von Dateien ohne Unterverzeichnisstruktur

ist das, was ich bisher:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <id>move-schemas</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${basedir}/schemas-target</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

... 

<resources> 
    <resource> 
     <directory>${basedir}/schemas-source</directory> 
     <includes> 
      <include>**/*.xsd</include> 
     </includes> 
    </resource> 
</resources> 

Und es ist (fast) zu arbeiten. Das einzige Problem ist, dass es die Source-Unterverzeichnisstruktur beibehält, während ich diese Hierarchie entfernen und alle xsd-Dateien in den Zielordner legen muss. Beispiel:

Dies ist, was ich in der schemas-Quellordner haben:

schemas-source 
│- current 
│ │- 0.3 
│  │- myfile.xsd 
│- old 
     │- 0.2 
      │- myfile-0.2.xsd 

und das ist, was ich in der schemas-Zielordner bräuchten:

schemas-target 
│- myfile.xsd 
│- myfile-0.2.xsd 

Antwort

20

Ich schlug meine leite mich immer wieder gegen diese Beschränkung.

Grundsätzlich: Ich glaube nicht, dass es eine Maven einzige Lösung gibt. Sie werden sich wie

  • Die Maven Antrun Plugin
    einbetten Ameise Aufgaben in Maven etwas dynamischer zu verwenden müssen, und in diesem Fall eine Ameise copy task, etwa so:

    <copy todir="${project.basedir}/schemas-target" flatten="true"> 
        <fileset dir="${project.basedir}/schemas-source"> 
         <include name="**/*.xsd"/> 
        </fileset> 
    </copy> 
    
  • Die GMaven plugin Lets Sie führen Groovy-Code von Ihrem Pom aus, etwa so:

    new File(pom.basedir, 'schemas-source').eachFileRecurse(FileType.FILES){ 
        if(it.name.endsWith('.xsd')){ 
         new File(pom.basedir, 'schemas-target/${it.name}').text = it.text; 
        } 
    } 
    
+0

Vielen Dank, habe ich versucht, das Maven Antrun Plugin, aber ich war von diesem flattern = "true" -Attribut nicht bewusst, dass der Trick funktioniert. –

+0

Leider ist das antrun-Plugin die einzige Möglichkeit, ähnliche Aufgaben auszuführen ... scheint wie "flatten" als Einstellung in das Kopierressourcen-Ziel von maven-resources plugin eingefügt worden zu sein. – JCD

+0

flatten ist ein Anfang, aber oft möchte ich einen "Start-Pfad" wie wenn ich ein WAR-Archiv zu erweitern, möchte ich Web-inf/Klassen verlieren, aber behalten die Paketstruktur. Aber ich denke, das kann mit Mappern erreicht werden: http://ant.apache.org/manual/Types/mapper.html –

9

Es gibt einen Weg .. und es ist wirklich monoton und umständlich. Implementieren Sie es nur, wenn Sie vollständig mavenized sein möchten. Seans Antwort ist die einfachste Lösung.

Das Problem ist, dass Sie jedes Verzeichnis angeben müssen und dann Platzhalter für die darin enthaltenen Dateien verwenden müssen.

<execution> 
<id>copy-jars</id> 
<phase>process-sources</phase> 
<goals> 
    <goal>copy-resources</goal> 
</goals> 
<configuration> 
    <outputDirectory>${basedir}/target/classes</outputDirectory> 
    <resources> 
     <resource> 
      <directory>${basedir}/resources</directory> 
      <includes> 
       <include>xyz.jar</include> 
      </includes> 
     </resource>  
     <resource> 
      <directory>${basedir}/as-u-like-it</directory> 
      <includes> 
       <include>abc.jar</include> 
      </includes> 
     </resource>  
</configuration> 

Verwandte Themen