2011-08-05 21 views
0

short:すべての.javaファイルとすべてのMETA-INFフォルダを一連のjarファイルからフィルタリングし、そのjarファイルからクラスファイルとリソースを1つのjarファイルにパッケージ化する必要があります。 私は現在maven-assembly-pluginを使用していますが、簡単にmavenビルドプロセスに組み込むことができる限り、何かを試すことになります。mavenアセンブリプラグインでexclude termを正しく使用する

long:私はツールのさまざまな開発段階を管理するためにmavenを使用しています。 基本的なステージは、フリーウェアである第二いくつかのより多くの機能を持っている、第三段階では細かいが、これまで、私はクラスパスに異なるソースディレクトリを追加するためにプロファイルを使用し、ソースがきちんとproject.jarにコンパイルされている作品の全ての機能)

です。

  • まず問題:プロファイルはproject.jarで終わる経由.javaソースがプロジェクトに含まれています。

そして私はまた、依存関係が含まれており、ウィンドウの実行可能ファイルを生成するために最終使用launch4j(現在のターゲットプラットフォーム)にfinal.jarを構築するmaven-assembly-pluginを使用します。

  • 第二の問題:依存関係のjarファイルから様々なMETA-INF部品がfinal.jarに混ぜると、私はそれらすべてをスキップするとよいでしょう。

私は<exclude>タグを使用してassembly.xmlの例で検索しましたが、dependencySet<exclude>*.java</exclude>の私の組み合わせを使用しているいずれかを見つけることができませんでした。 私はそれを行うことができるという私にも肯定的ではありません。これまで

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>jar-with-dependencies</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
      <useDefaultExcludes>true</useDefaultExcludes> 
      <!--<useTransitiveFiltering>true</useTransitiveFiltering>--> 
      <!--<useStrictFiltering>true</useStrictFiltering>--> 
      <excludes> 
       <exclude>META-INF</exclude> 
       <exclude>**/*.java</exclude> 
       <exclude>*.java</exclude> 
       <exclude>*:sources</exclude> 
      </excludes> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

私の研究:

は、ここに私のassembly.xmlある

私はexample assembly.xml exclude javaとGoogleで検索しましたが、私の問題をカバーした例を見つけることができませんでした。 (私は過去のことをたくさん検索しましたが、見つけたものはすべて保存していませんでした) http://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.htmlを読みましたが、その知識を私の問題に適用できませんでした。

答えて

1

わかりましたので、私は私のためにそれを考え出しました。

最初:私が使用したプロファイルを使用して含まれていた元の部品からJavaおよびその他のソースファイルをフィルタリングするために:私は使用し始めたとき

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>de.steamnet.oneClickWonder.awt.OCWController</mainClass> 
        </manifest> 
       </archive> 
       <excludes> 
        <exclude>**/*.java</exclude> 
        <exclude>**/*.form</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 

依存関係からMETA-INFをフィルタリングするタスクがなくなりましたインストーラのように今は自分のMETA-INFを使って複数のjarファイルを配布できます。

マイケルOは、このアプローチ(追加のソース部分を含むようにプロファイルを使用する)は正しいことではないかもしれないと述べていますが、それは非常に便利であり、私はそれに固執します。 jarプラグインのexcludesタグを使用すると、最終的なjarファイルに追加されるソースファイルの問題もなくなります。

-1

これは絶対に間違った方法です。アーティファクトIDごとに複数のメインジャーを決して生成しないでください。このアプローチを使用する必要があります。

  1. すべてのメイン・ジャー用に1つのモジュールを作成します。
  2. は完全なものから基本的なものへの依存関係を設定します。
  3. あなたはあなたのものを再パッケージするオプションが必要です。あなたが望む/必要な方法でアーティファクトを含む陰影プラグインを使用するか、dependency:unpack-dependenciesを使用して、出力ディレクトリにその物を入れます。

その後、「集約された」jarファイルが作成されます。プロファイルとasmプラグインでそれを行うのはではなく、スケールです。

を実行した後で、tar.gzまたはdistroの別のモジュールを作成し、そのメインjarに依存してアセンブリをバンドルします。あなたは終わった!

ヴィエルErfolgウントGrußのnachデューレン

+0

ええと...よく、私はそれについて考えましたが、既に反対していました。実際には、プロファイルを使用して正しいソースブランチをロードするだけでは、単一のモジュールにすべての単一の要素を構築するよりもはるかに多くの作業が必要になります。あなたのご意見をありがとうございますが、これは私の状況では実行可能な方法ではありません。私は、exeファイルを作成するためのシェルスクリプトを作成して、手作業の前にあまりにも多くのものを除外するように変更すると思います。 Vielen Dank trotzdem、Grüßenach Berlin –

+0

私の意見では、アプローチは複雑すぎ、邪魔になっています。それを再考する必要があります。 –

+0

これはうまく設計されていません。しかし、私はまだ良いアプローチを見つけていない。異なるモジュールを使用すると、避けたい日常的なオーバーヘッドが大きくなりすぎます。私は5,6モジュールを持つことになります(最下位ステージのいくつかの部分は上位のものの一部ではないなど)。それはまったく混乱しないでしょう。現在の設定では、プロファイルを選択し、私が作業しているコードの部分を一度に正確に表示します。ここに私をもたらした問題はより小さくなっています。 (btw。元のコメントを少し編集しました) –

関連する問題