2010-11-23 8 views
22

Mavenを使用して、特定のフォルダに含まれるすべての* .xsdファイルを別のものに移動しますが、ソースのサブディレクトリ構造は使用しません。Maven:サブディレクトリ構造を持たないファイルをコピーする

これは私がこれまで持っているものです。

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

そして、それは(ほとんど)取り組んでいます。唯一の問題は、ソースのサブディレクトリ構造を保持している間に、その階層を削除し、すべてのxsdファイルをターゲットフォルダに配置する必要があることです。例:

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

、これは私がスキーマ・ターゲットフォルダに必要があると思いますものです::

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

答えて

20

私は私を打ち

これは私がスキーマソースのフォルダにしたものですその制限に対して、何度も何度も頭を下げる。

基本的には、私は唯一の解決策はないと思います。

<copy todir="${project.basedir}/schemas-target" flatten="true"> 
    <fileset dir="${project.basedir}/schemas-source"> 
     <include name="**/*.xsd"/> 
    </fileset> 
</copy> 
  • GMaven plugin ができます:あなたは、このケースでは、Mavenので

    • のように、このような何かをアリcopy taskMaven Antrun Plugin
      埋め込みAntタスクをダイナミックなものを使用してに頼らなければならないでしょうGroovyコードをあなたのpomから実行すると、次のようになります。

      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

    私はMavenのAntrunプラグインを試してみましたが、私はトリックを行うことflattern =「true」属性を認識していませんでした、ありがとうございます。 –

    +0

    残念ながら、antrunプラグインは私が似たようなタスクを実行できる唯一の方法です... "flatten"がmaven-resourcesプラグインのcopy-resourcesゴールの設定に含まれているはずです。 – JCD

    +0

    flattenは始まりですが、私はWARアーカイブを展開するときのように "開始パス"を設定したいことがよくありますが、web-inf/classesを失い、パッケージ構造は保持したいかもしれません。しかし、私はそれがマッパーを使用して達成できると思います:http://ant.apache.org/manual/Types/mapper.html –

    9

    方法があります。本当に単調で扱いにくいです。あなたが完全に夢中になりたい場合にのみ実装してください。 Seanの答えは最も簡単な解決策です。

    問題は、各ディレクトリを指定してから、内部のファイルにワイルドカードを使用することです。

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

    関連する問題