1

.java短い: 一連の jar からすべてのファイルとすべてのフォルダーをフィルター処理しMETA-INF、その jar のクラス ファイルとリソースを 1 つの jar にパッケージ化する必要があります。私は現在 を使用していますmaven-assembly-pluginが、maven ビルド プロセスに簡単に統合できる限り、別のものを試してみます。

long: ツールのさまざまな開発段階を管理するために Maven を使用しています。基本段階はフリーウェア、第 2 段階はいくつかの追加機能、第 3 段階はすべての機能)

これまでのところ問題なく動作しています。プロファイルを使用して、さまざまなソース ディレクトリをクラスパスに追加すると、ソースはproject.jar.

  • 最初の問題:.javaプロファイルを介してプロジェクトに含まれるソースは、project.jar.

次に、 を使用して依存関係も含むmaven-assembly-pluginを構築final.jarし、最後に launch4j を使用して Windows (現在のターゲット プラットフォーム) 用の実行可能ファイルを生成します。

  • 2 番目の問題:META-INF依存関係の jar のさまざまな部分が混在しているためfinal.jar、それらをすべてスキップする必要があります。

assembly.xmlタグを使用して の例を検索しましたが、と<exclude>の組み合わせを使用した例は見つかりませんでした。私はそれができると確信さえしていません。dependencySet<exclude>*.java</exclude>

ここに私のassembly.xmlがあります:

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

これまでの私の研究:

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

4

2 に答える 2

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 を配信できるようになりました。

そのため、Michael-O が述べたように、このアプローチ (プロファイルを使用して追加のソース パーツを含める) は正しい方法ではないかもしれませんが、非常に便利なので、私はこれに固執しています。jar プラグインの excludes タグを使用すると、ソース ファイルが最終的な jar に追加されるという問題も解消されます。

于 2011-09-03T19:38:59.227 に答える
-1

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

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

その後、「集約された」jarファイルになります。プロファイルと asm プラグインでそれを行うと、単純にスケーリングされません。

完了したら tar.gz またはディストリビューション用の別のモジュールを作成し、そのメイン jar に依存してアセンブリをバンドルします。これで完了です。

Viel Erfolg und Gruß nach Düren

于 2011-08-06T01:11:52.523 に答える