2016-08-25 17 views
2

dependencies:unpack-dependenciesのアーカイブ形式はどれですか?例えば、私が見る限り、RPMパッケージを解凍することはできません。どこかで利用可能なフォーマットのリストはありますか?私はRPMパッケージを解凍することができるいくつかのトリックがありますか?依存関係:アン​​パック依存関係の目標はどの形式で展開できますか?

+1

おそらく答えはこちらです:http://stackoverflow.com/questions/15393110/maven-custom-archive-extension-how-do-i-use-unpack-dependencies –

答えて

2

Maven Dependency Pluginは、内部的にPlexus Archiverを使用してファイルをアーカイブおよびアーカイブ解除します。現在、maven-dependency-plugindepends on version 2.9のバージョン2.10はplexus-archiverです。

Plexusコンポーネントは、META-INF/plexus/components.xmlファイルの助けを借りて構成されています。依存関係のプラグインの場合は、このファイル​​を見ることができ、それは次の拡張のためにunarchiver宣言しています。zipjarwarearswcnaresbsarcarparrar。彼らはすべて同じコンポーネントを使用します。つまり、すべてがZIPファイルであるかのように抽出されます。

神経叢アーカイバ2.9はまた、事前に定義されたunarchiverのセットが付属しており、それが追加されます:bzip2gziptartgztar.gztbz2tar.bz2リストに。最新バージョンには、snappyxzファイルも追加されています。


カスタム拡張機能を解凍することができるようにしたい場合、あなたはそれを開梱できる新しいプロジェクトを作成し、神経叢の構成要素としてそれを登録する必要があります。 RPMパッケージの場合、あなたはMETA-INF/plexus/components.xml内で、次のrpm-archiver Mavenプロジェクトを作成して持つことができます:class.able.to.unpack.rpm.packagesはRPMファイルを解凍することができ、カスタムクラスの完全分類された名前である

<component-set> 
    <components> 
    <component> 
     <role>org.codehaus.plexus.archiver.UnArchiver</role> 
     <role-hint>rpm</role-hint> 
     <implementation>class.able.to.unpack.rpm.packages</implementation> 
     <instantiation-strategy>per-lookup</instantiation-strategy> 
    </component> 
    </components> 
</component-set> 

。このクラスはインターフェイスorg.codehaus.plexus.archiver.UnArchiverを実装する必要がありますが、簡略化するために、このクラスをorg.codehaus.plexus.archiver.AbstractUnArchiverから継承させることができます。必要なのは、​​とexecute(path, outputDirectory)メソッドをオーバーライドするだけです。前者はgetSourceFile()で検索されたファイルをgetDestDirectory()で検索されたディレクトリに抽出する必要があり、後者はソースファイル内の指定されたpathを指定されたoutputDirectoryに抽出するだけです。

この新しいプロジェクトをコンパイルしてインストールした後、あなたはmaven-dependency-pluginへの依存関係として追加することができますプラグインが実行されるとき、それはrpm拡張子を持つファイルを解凍する方法を知っているだろう、この方法で

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <!-- rest of your configuration --> 
    <dependencies> 
     <dependency> 
      <groupId>my.archiver</groupId> 
      <artifactId>rpm-archiver</artifactId> 
      <version>0.0.1</version> 
     </dependency> 
    </dependencies> 
</plugin> 

components.xmlで設定したクラスを使用します。

関連する問題