2

私は既存のJavaコマンドラインプログラムを持っています。これは、何億もの引数を取り、優れたargs4jを使用してそれらを解析します。

ここで、このアプリケーションに含まれているJavaコードを実行するMavenプラグインmojoを作成します。

今のところ、私は基本的な方法を試しました:すべてのコマンドライン引数をmojoパラメーターに複製します。Bu maven mojo javadocアノテーションは、args4jアノテーションよりもはるかに完全で統合されていないため、これは非常に退屈でエラーが発生しやすいと思います。

それで、maven 3を使用して、実行可能ファイルをmaven mojoとして実行するためのより良い方法はありますか?ああ、 exec-maven-pluginについて話さないでください。その場合は制限が多すぎると思います(私の実行可能ファイルはプロジェクト設定とユーザープロファイル設定を組み合わせて実行する必要があり、単にmavenを呼び出すだけだと思います) -exec-pluginはトリックを行いません)。

4

2 に答える 2

2

唯一の方法は、mojoパラメーターを使用することです。これは、特にMavenプラグインの場合のMavenの方法です。

mojoパラメーターの代わりに構成を含むプロパティファイルを定義するのに失敗したこと。しかし、Mavenプラグインのベストプラクティスは、Mojoパラメーターを使用することだと思います。

于 2011-04-05T13:57:44.673 に答える
1

@khmarbaiseの答えは、一般的な観点からは完全に真実ですが、少し拡張したいと思います。

私のスタンドアロンコマンドラインアプリケーションはargs4jを使用していますが、 Commons CLIまたは(さらに)メインBeanの同じコマンドラインアノテーションに依存するJCommanderを使用すると、プロセスをかなりうまくコピーできると思います。

つまり、私が行ったことは、イントロスペクションを使用して、メインのBeanコマンドライン引数のリストを取得するMavenMojoです。これらの引数のそれぞれについて、プロジェクト/設定情報にプロパティが存在することを期待しています。このプロパティが存在する場合は、オプションと関連するfinallyを使用して偽のコマンドラインを作成します。

すべてのオプション(Mavenプロパティとして保存)を参照したら、args4jを使用してBeanを埋め、メインコマンドを使用してこのBeanを実行できます。

アプリケーションにフラグのセットと引数なしのrun()メソッドがあれば、このアプローチは非常に一般化できると思います。

于 2011-04-06T09:33:07.167 に答える