web-dev-qa-db-ja.com

Mavenは、プロジェクトのすべての依存JARを収集して、アプリケーションの展開を支援できますか?

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

これはスタンドアロンJavaアプリケーション用)なので、私はnotMavenリポジトリへのデプロイに興味があります。また、かなり些細な、または少なくとも簡単にグーグルが可能です。

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

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

次に、myApp.jarをJARファイルとしてinstallLocationから実行すると、私の$CLASSPATHに関係なく「正常に動作します」。

いくつかの回答を先取りして試すには:

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

調査したいのは 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を実行してコピーを実行します。これを Assemblyプラグイン と組み合わせると、すべてを自己完結型のアーカイブにパッケージ化して配布できます。

81
laz

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

すべての外部ライブラリを含めるには、上記のように依存プラグインを使用できます。

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

 <plugin> 
 <groupId> org.Apache.maven.plugins </ groupId> 
 <artifactId> maven-dependency-plugin </ artifactId> 
 < version> 2.6 </ version> 
 <executions> 
 <execution> 
 <id> copy-dependencies </ id> 
 <phase> prepare-package < /phase>
 <goals> 
 <goal> copy-dependencies </ goal> 
 </ goals> 
 <configuration> 
 <outputDirectory > target/classes/lib </ outputDirectory> 
 <overWriteIfNewer> true </ overWriteIfNewer> 
 <excludeGroupIds> 
 junit、org.hamcrest、org.mockito、org.powermock、 $ {project.groupId} 
 </ excludeGroupIds> 
 </ configuration> 
 </ execution> 
 <execution> 
 <phase> generate -sources </ phase> 
 <goals> 
 <goal> sources </ goal> 
 </ goals> 
 </ execution> 
 </ executions> 
 <configuration> 
 <verbose> true </ verbose> 
 <detail> true </ detail> 
 <outputDirectory> $ {project.build.directory} </ outputDirectory> 
 </ configuration> 
 </ plugin> 
9
Gordon Dickens

さらにもう1つは appassembler plugin です
私が気に入っているのは、すぐに使用できる形式でアプリをパッケージ化することです(.batファイルなど)

7

Mavenの依存関係プラグイン、特にコピー依存関係の目標を見てください。使用方法のセクションでは、必要なことを正確に行う方法について説明します。

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

$ mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR
4
Rama

確かにできます。 shade plugin を使用する必要があります。

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

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

3
stimms

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/
0
ozma