2

理解できません。Maven exec プラグインを使用するように 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 リポジトリ) だけですか??

私は次のことを試しました:

  • dependency:get ゴールで jar を取得し、解凍します。pom.xml がアーティファクト jar の META-INF/maven で終わるように見えるので、私はそれで何もできません。それを使用する方法はありますか?

  • プロジェクトのアーティファクトに単一の依存関係を使用してプロジェクトを実行するダミーの pom を作成します。その後、exec:java を使用してメイン クラスを実行できますが、プロジェクト pom の構成は使用されません。

ありがとう。

4

2 に答える 2

2

AppAssembler プラグインは、私にとって非常にうまく機能しました。プロジェクトの pom の exec プラグイン構成を、ビルド セクションで次のようなものに置き換えました。

<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/appassemblyr/binから結果のスクリプトを実行するための外部ツール ランチャーを作成しました。

デプロイしたいマシンで (アーティファクトと依存関係がインストール/デプロイされている内部 Maven リポジトリへのアクセスを想定しています):

  • 最初にwgetまたはmvn dependency:getを使用して、アーティファクト jar のコピーを取得します。
  • ポンを抽出します。 unzip -j artifact.jar * /pom.xml*
  • mvn appassemblyr:assemble -DassemblyDirectory= を実行します。
  • artifact.jar を ./lib ディレクトリに移動します。
  • ./bin で生成されたシェル スクリプトに実行権限を設定します。
于 2012-05-20T14:36:10.377 に答える
1

onejarのようなものを使ってみましたか?

それはあなたが探しているもののように聞こえます。

于 2012-05-18T14:00:26.770 に答える