私は 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
に関係なく「正常に動作します」。
いくつかの回答を先取りして試すには:
<classpathPrefix>
と<classpathMavenRepositoryLayout>
を使用してこの作業を行う方法を見つけましたが、これは私のマシンでのみです。 (経由:<classpathPrefix>${settings.localRepository}</classpathPrefix>
)調査したいのは 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プラグイン と組み合わせると、すべてを自己完結型のアーカイブにパッケージ化して配布できます。
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>
さらにもう1つは appassembler plugin です
私が気に入っているのは、すぐに使用できる形式でアプリをパッケージ化することです(.batファイルなど)
Mavenの依存関係プラグイン、特にコピー依存関係の目標を見てください。使用方法のセクションでは、必要なことを正確に行う方法について説明します。
コマンドラインから実行するには、次のようにします。
$ mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR
確かにできます。 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>
あなたのプロジェクトに。
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/