デプロイされたアーティファクトからメインクラスを実行します
-
11-12-2019 - |
質問
私はそれを得ません。 Maven Exec Pluginを使用するようにPom.xmlを設定しましたので、正しいクラスパスを使用してプロジェクト内の一部のクラスを実行できます。-d定義と-javaagent。そのため、シェルから./target/classesなどに組み込まれています。を使用してmain()メソッドを実行できます。
mvn exec:java -Dexec:mainClass=classWithAMainMethod
.
これまでのところ善の良い。
今私はプロジェクトを出荷したい(JARアーティファクト)と私はまだ私が正しい引数などでクラスを実行するためにpom.xmlに置かれた設定を使用できるようにしたいです。それ? を維持する方法はありますか
mvn -artifactJar=MyArtifact.jar exec:java -Dexec:mainClass=classWithAMainMethod
.
私が持っているすべてのときは、MyArtifact.jar(またはMyArtifact.jarを持つMavenリポジトリ)です。
私は次のことを試しました:
-
依存関係を持つjarを取得します:目標を取得してそれを解凍します。私はそれを使うことができません Pom.xmlが成果物JARのMeta-Inf / Mavenに終わっているようです。それを使用する方法はありますか?
-
私のプロジェクトの成果物への単一の依存関係でプロジェクトを実行したいダミーPOMを作成します。その後、EXEC:JAVAを使用してメインクラスを実行できますが、それは私のプロジェクトPOMからの設定は使用されません。
ありがとう。
解決 2
AppAssemblerプラグインは私にとって非常によく調べました。ProjectのPOMのEXEC PLUSIN CONFLAをこのようなものに置き換えました。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<repositoryLayout>flat</repositoryLayout>
<repositoryName>lib</repositoryName>
<extraJvmArguments>
-Djava.rmi.server.hostname=localhost
-javaagent:${spring.javaagent.jar}
</extraJvmArguments>
<programs>
<program>
<name>foo1</name>
<mainClass>net.foor.FooMain</mainClass>
</program>
...
</configuration>
</plugin>
.
Eclipseでは、結果のスクリプトを target / appassembler / bin から実行するための外部ツールランチャーを作成しました
マシン上では、(私の成果物+依存関係がインストール/展開されている内部Mavenリポジトリへのアクセスを仮定すると仮定する):
- 最初の使用 wget または MVN依存関係:を取得して、私の成果物JARのコピーを取得します。
- POMを抽出します。 unzip -j artifact.jar * /pom.xml *
- mvn appassembler:集合 - dassembledirectory=。
- artifact.jarを./libディレクトリに移動します。
- 生成されたシェルスクリプトの実行権限を./bin に設定します。
他のヒント
onejar ?
あなたが探しているもののように聞こえます。