5

今まで社内でAntを使っていました。アプリケーションをクライアントに送信する必要があるときはいつでも、すべてのソース コードとすべての jar ライブラリおよび Ant 自体を単純なバッチ ファイルと共にパッケージ化する特別な Ant スクリプトを実行します。

次に、クライアントは、ネットワーク アクセスがまったくない (Ant でさえない) コンピュータにファイルを置き、バッチ ファイルを実行することができます。コンピューターに有効な JDK がある限り、バッチ スクリプトは jar を使用してすべてのコードをコンパイルし、最終的にクライアントによってアプリケーション サーバーにデプロイされる WAR/EAR を作成します。

最近、Maven 2 に移行しましたが、同じことを行う方法が見つかりませんでした。Maven アセンブリ プラグインを見たことがありますが、これはソース配布物またはバイナリ配布物を作成するだけです。ソースコードが含まれているが、使用するライブラリ (Spring、Hibernate など) のバイナリ jar が含まれているため、シナリオは実際には混在しています。

では、Maven を使用して、ネットワークにまったくアクセスできないコンピューターで実行できる自己完結型のアセンブリ/リリース/パッケージを作成することは可能ですか? つまり、すべてのライブラリを内部に含める必要があります。

Maven 自体も内部に含まれている場合は追加のボーナスですが、これは厳密な要件ではありません。最終的なパッケージは、たった 1 つのコマンドで簡単にコンパイルできます (システム管理者が簡単に実行できます)。

このために独自の Maven プラグインを作成することを考えていましたが、誰かが既にこれに遭遇したと思われます。

4

5 に答える 5

2

開発環境から、ビルド プラグインの下に以下を含める場合

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

mvn assembly:assembly を呼び出すと、ターゲット フォルダーに yourApp-version-with-dependencies.jar が取得されます。これは自己完結型の jar であり、Main クラスの MANIFEST.MF エントリを使用すると、誰でもアプリケーションをダブルクリックして実行できます。

于 2009-07-14T06:12:45.253 に答える
1

このアプローチを試すことができます:

  • mvn ant:ant を使用して、Maven プロジェクトから Ant ビルド スクリプトを作成する
  • ant がプロジェクトの依存関係であることを確認してください
  • アセンブリを使用してアリ
    システムを構築する

またはプランb:

  • mvn ant:ant を使用して、Maven プロジェクトから Ant ビルド スクリプトを作成する
  • ant がプロジェクトの依存関係であることを確認してください
  • Ant を呼び出してビルドを実行する「ブートストラップ クラス」を作成します。
  • アプリアセンブラーを使用して、スクリプト化されたビルドおよびインストール環境を構築する

プラン b では、パッケージ化されたソース jar からソース ツリーをセットアップするスクリプトを作成し、appassemblyr ビルドのバットまたは sh スクリプトを使用してブートストラップを呼び出し、ant を介してビルドします。ブートストラップは、ビルドの前後に必要なことを何でも実行できます。

お役に立てれば。

于 2009-07-10T15:44:51.483 に答える
0

これは私がそれを行う方法です... pomのビルド部分にこれを追加します:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

次に、プロファイル セクションに次のビットを追加します。

<profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

そして、maven のインストールを行うと、jar がビルドされ、ソースの jar もチェックインされます。

于 2009-07-13T13:36:13.040 に答える
0

ソース プラグインは、probject "source:jar" のソースを含む jar を提供します。次に、アセンブリ プラグインを使用して、内部プロジェクトのソース jar (ソースを使用してこれらのソース jar を参照) と外部プロジェクトのバイナリ jar を 1 つのディストリビューションに結合できます。

ただし、これをコンパイル可能なユニットにすることについては、提案はありません。確かに maven をバンドルできますが、プロジェクトのビルドに必要なすべてのプラグインを含むバンドルを作成する必要があります。私はそれを行うための既存のツールを知りません。

于 2009-07-09T20:31:15.917 に答える
0

おそらく、同様の質問に対して私が提出した回答が役立つ可能性があります。アプリケーションのデプロイを支援するために、maven はプロジェクトのすべての依存 jar を収集できますか? を参照してください。不足している 1 つの部分は、アセンブリにソース コードを含める方法です。アセンブリプラグインでそれを管理する方法があると想像する必要があります。これは、ディストリビューションに Maven が含まれていることにも対応していません。

Ant から Maven に移行した理由は何ですか? Ant ソリューションですべてがうまくいったように思えますが、Maven は何を買ってくれますか?

依存関係の管理だけであれば、Ant から Maven を活用して両方の長所を活かす手法があります。

于 2009-07-09T19:35:07.417 に答える