maven pom.xmlファイルを入力として受け取り、次のことを行うJavaプログラムを作成しようとしています。
- すべての依存関係をダウンロードします
- クラスパスにjarを追加します
- Javaコードを実行します(jarからロードされます)
出来ますか?上記の#1を達成するためのサンプルコードは大歓迎です
あなたの要件は、Maven Exec プラグインがすでに行っていることとまったく同じです。
どうしてもこれをJavaアプリに埋め込んで行う必要がある場合は、次のようにします。
Mavenが依存関係の解決を行うために内部で使用するライブラリはAetherと呼ばれます。Sonatypeサイトのドキュメントを見ると、手順1の実行方法の例があります。依存関係の解決プロセスの一部で、依存関係のリストにアクセスし、ループしてクラスパスを作成できます。
ステップ3では、ProcessBuilderを使用して、Aetherを使用してクラスパスを構築したJVMのサブプロセスとしてターゲットJavaアプリを起動できます。
シェルスクリプトを使用できる場合:
mvn dependency:get -Dartifact=[group]:[artifact]:[version]
アーティファクトをローカルリポジトリにダウンロードするために使用できます。
次に、を使用mvn dependency:build-classpath
してクラスパス文字列を生成できます。
次に、-cpオプションを指定してJavaを実行するだけです。必要なメインクラスも知っている必要があります。または、アーティファクトとバージョン番号からプライマリjarの名前を計算し、それを-jarに渡すことができます。
デプロイメント環境でメインプロジェクトのpom.xmlを取得できる場合:
を使用できますmvn exec:java -DmainClass=com.company.package.YourMainClass
。このオプションははるかに単純ですが、Maven JVM内で実行するという欠点があり、別のプロセスをフォークするオプションがないことがわかった限りです。また、この作業を行うには、本格的なpomが必要ですが、これは必ずしも便利ではありません。