55

Mavenを使い始めたばかりです(実際に評価しています)。アプリケーション用のJARファイルと、すべての依存関係 (lib など) を含むディレクトリをすばやく生成して、これら 2 つをデプロイできるようにする必要があります。スタンドアロンで実行します。lib適切なマニフェストを使用して JAR ファイルを生成するのは簡単ですが、現在のプロジェクトの依存関係をデプロイ可能 なディレクトリに Maven にコピーさせる方法がわかりません。

これはスタンドアロンの Java アプリケーション用であるため、Maven リポジトリへのデプロイには興味がありません。Maven リポジトリもかなり簡単で、少なくとも簡単にググることができます。

依存する JAR ファイルを指定されたディレクトリにコピーする以外のすべてを行う方法を見つけました。これは私が探しているワークフローです:

$ mvn clean
$ mvn package
$ cp -r target/{lib,myApp.jar} installLocation

次に、JAR ファイルとして実行myApp.jarするinstallLocationと、 my $CLASSPATH.

いくつかの回答を先取りするには:

  • Main-class: セットがあり、正常に動作します。
  • また、MANIFEST.MF にクラスパスを設定しましたが、これも正常に機能します。
  • <classpathPrefix>これを使用して機能させる方法を見つけました<classpathMavenRepositoryLayout>が、私のマシンでのみです。(経由: <classpathPrefix>${settings.localRepository}</classpathPrefix>)
4

6 に答える 6

84

調査したいのは、Maven の依存関係プラグインです。次のような内容を pom.xml に追加します。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <configuration>
        <outputDirectory>
            ${project.build.directory}
        </outputDirectory>
    </configuration>
</plugin>

次に、コピーを実行mvn clean dependency:copy-dependenciesしてコピーを実行します。これをアセンブリ プラグインと組み合わせると、配布用の自己完結型アーカイブにすべてをパッケージ化できます。

于 2009-02-20T04:03:42.747 に答える
9

Shade プラグインは、すべての jar からすべてのパッケージをまとめてロールするため、気にしませんでした。

すべての外部ライブラリを含めるには、上記の Dependency Plugin を使用できます。

この例では、「パッケージ」フェーズの前に「target/classes」の下に「lib」ディレクトリを作成します。

<プラグイン>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <バージョン>2.6</バージョン>
  <実行>
    <実行>
      <id>コピー依存</id>
      <phase>パッケージの準備</phase>
      <目標>
        <goal>コピー依存</goal>
      </目標>
      <構成>
        <outputDirectory>target/classes/lib</outputDirectory>
        <overWriteIfNewer>真</overWriteIfNewer>
        <除外グループID>
          junit,org.hamcrest,org.mockito,org.powermock,${project.groupId}
        </excludeGroupIds>
      </設定>
    </実行>
    <実行>
      <phase>生成ソース</phase>
      <目標>
        <goal>ソース</goal>
      </目標>
    </実行>
  </実行>
  <構成>
    <verbose>真</verbose>
    <detail>真</detail>
    <outputDirectory>${project.build.directory}</outputDirectory>
  </設定>
</プラグイン>
于 2013-02-01T22:32:54.327 に答える
9

Maven の依存関係プラグイン、特に copy-dependencies ゴールを見てください。使い方のセクションでは、あなたが望むことを正確に行う方法を説明しています。

コマンドラインから行うには、次のようにします。

$ mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR
于 2015-12-16T09:03:46.677 に答える
2

それは確かにできます。追加することで実行できるシェードプラグインを使用する必要があります

     <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.3-SNAPSHOT</version>
        <configuration>
          <!-- put your configurations here -->
        </configuration>
      </plugin>

あなたのプロジェクトに。

于 2009-02-20T02:58:23.247 に答える
0

maven.repo.localを使用すると、すべての jar を収集できますが、それらは maven 階層 (.m2) を持つディレクトリに収集されます。

mvn install -Dmaven.repo.local=./pick/some/folder

その後、それらを収集できます (Linux の場合):

mkdir flat-repo
find ./pick/some/folder -type f -name "*.jar" | xargs -I'{}' cp '{}' flat-repo/
于 2016-08-17T15:05:53.880 に答える