2016-09-02 3 views
1

私の問題は、ファイルが出力ディレクトリに存在しない場合に限り、.jarファイルからmavenでファイルを抽出したいということです。だから私はファイルがある場合/src/META-INF/beans.xmlpersistence.xmlなどを抽出しただけですMaven-dependency-plugin:overWrite = falseが無視されました

悲しいことに、maven-pluginは私が試した<overWrite>false</overWrite>のすべての組み合わせを告発します。

質問:私は何を間違えていると思いますか?出来ますか?

<build> 
    ... 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
     <id>unpack</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>unpack</goal> 
     </goals> 
     <configuration> 
      <artifactItems> 
      <artifactItem> 
       <groupId> ... </groupId> 
       <artifactId> ... </artifactId> 
       <version>${project.version}</version> 
       <outputDirectory>${basedir}/src/META-INF</outputDirectory> 
       <includes>beans.xml,persistence.xml</includes> 
       <overWrite>false</overWrite> 
      </artifactItem> 
      </artifactItems> 
      <overWriteIfNewer>false</overWriteIfNewer> 
      <overWrite>false</overWrite> 
      <overWriteSnapshots>false</overWriteSnapshots> 
      <overWriteReleases>false</overWriteReleases> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
    ... 
</build> 
+0

なぜ 'src/META-INF'に書き込む必要がありますか?なぜ 'src/main/resources/META-INF'を使っていないのでしょうか?これはどんな目的ですか? – khmarbaise

+0

私はコードジェネレータを書いています。ジェネレータは、手書きのコード(および設定)を考慮に入れることができます。 'pom.xml'には、モデルをとり、そこからコードを生成し、生成されたコードをコンパイルする(手書きコードを考慮して)、maven-projectの問題があります。生成されたコードは 'gen /'に入れられ、手書きのコードは 'src'にあると予想されます。私は何も与えられていない場合、デフォルト設定ファイルを使用したいと思います。だから私はそれらが存在しない場合にのみ抽出したいのです。 – user3637541

答えて

0

シンプルoverWriteプロパティプラグインの実際doesn't exist as a propertyは、したがって、単にプラグインによって無視されます。

さらに、あなたのプロジェクトは${basedir}/src/META-INFに書かれていますが、これはおそらく最良の選択肢ではありませんが、場合によっては合理的かもしれません。

したがって、プロジェクトのvalidateフェーズで、一番最初のビルド時にのみ、一度だけ書きたいと考えています。存在する場合は、再度オーバーライドしないでください。

これらの要件については、以下が良く合うことがあります。

  • ファイルmissingためactivationオプションを使用しMaven profile
  • を使用します。つまり、ファイルが(初めて)がない場合にアクティベートあなたのプラグイン設定を実行するプロファイル。ファイルが既に存在する場合、プロファイルを活性化しない、何のアクションも明らかなよう

    <profiles> 
        <profile> 
        <id>unpack-files</id> 
        <activation> 
         <file> 
         <missing>${basedir}/src/META-INF/beans.xml</missing> 
         </file> 
        </activation> 
        <build> 
         <plugins> 
          <!-- move here the maven-dependency-plugin unpack execution --> 
         </plugins> 
        </build> 
        </profile> 
    </profiles> 
    

何かを上書きしないではないでしょうあなたはまだこのロジックを完全に制御を持っているでしょう:

  • ファイルが存在しない場合には、最初の実行は、そのidmvn clean install -Punpack-files
経由して、それはまだオンデマンドで起動することができ
  • 、アクティブになります
  • +0

    あなたの答えをありがとう。それは私の問題を解決します。私は/ src /ディレクトリに存在しない場合にファイルを追加するコードジェネレータに取り組んでいます(ユーザーが手書きのファイルを使用する場合は存在し、生成されたファイルは使用しない場合)。私はあなたのアプローチに行く場合、私は各ファイル(1つのファイルが存在することができますし、私はそれらの両方を上書きする気にしないので、欠落して1つを追加することができます)あなたはこの問題に対するより洗練された解決法を知っていますか? – user3637541

    +0

    @ user3637541あなたはより良い方法を見つけましたか?問題は依然としてグローバルリストに未回答のまま表示されています。一般的には、より良い解決策があるかどうかを知りたいと思っていました。 –

    +0

    悲しいことに、私はあなたの解決策を検討しました。 – user3637541

    関連する問題