プロジェクトのランタイム依存関係をtarget/lib
フォルダーにコピーするにはどうすればよいですか?
それが今であるため、後にフォルダだけ私のプロジェクトのjarファイルが含まれていませんが、実行時の依存関係のどれも。mvn clean install
target
プロジェクトのランタイム依存関係をtarget/lib
フォルダーにコピーするにはどうすればよいですか?
それが今であるため、後にフォルダだけ私のプロジェクトのjarファイルが含まれていませんが、実行時の依存関係のどれも。mvn clean install
target
回答:
これは私にとってはうまくいきます:
<project>
...
<profiles>
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
excludeScope
オプションを追加します(maven.apache.org/plugins/maven-dependency-plugin/…)。
<excludeScope>test</excludeScope>
内に入りconfiguration
ます。
最善のアプローチは、何をしたいかによって異なります。
mvn install dependency:copy-dependencies
ターゲットフォルダに作成された依存関係ディレクトリで私のために動作します。いいね!
見てみましょうMavenの依存関係のプラグインは、具体的には、依存関係を:コピーの依存関係の目標を。見出し「dependency:copy-dependencies mojo」の下の例を見てください。設定しOUTPUTDIRECTORY $ {BASEDIR} /ターゲット/ libにする構成プロパティを(私は信じて、あなたがテストする必要があります)。
お役に立てれば。
Mavenの他のフェーズを使用せずに依存関係をターゲットディレクトリにコピーする必要がある場合のシンプルでエレガントなソリューション(これはVaadinを操作するときに非常に便利です)。
完全なpomの例:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${targetdirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
次に実行します mvn process-sources
jarファイルの依存関係は次の場所にあります /target/dependency
これをときどき行いたい(したがってPOMを変更したくない)場合は、次のコマンドラインを試してください。
mvn dependency:copy-dependencies -DoutputDirectory = $ {project.build.directory} / lib
最後の引数を省略すると、依存関係はに配置されtarget/dependencies
ます。
mvn dependency:copy-dependencies -DoutputDirectory=./lib
このようなものを試してください:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven clean install
、あなたは見つけるでしょうlib
にtarget
install
フェーズを置き換えますprocess-resources
build
必要なのは、pom.xml内の次のスニペットだけですbuild/plugins
。
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
上記は、実行するpackage
フェーズで実行されます
mvn clean package
そして、依存関係はスニペットで指定されたoutputDirectoryにコピーされます(つまりlib
、この場合)。
たまにそれをしたいだけなら、pom.xmlを変更する必要はありません。以下を実行するだけです:
mvn clean package dependency:copy-dependencies
デフォルトの場所を、無効にするには${project.build.directory}/dependencies
、システムプロパティを追加するという名前のoutputDirectory
、すなわち
-DoutputDirectory=${project.build.directory}/lib
アプリケーションjarのバンドルを、そのすべての依存関係およびMainClassを呼び出すためのいくつかのスクリプトと共に配信する場合は、appassembler-maven-pluginを確認してください。
次の構成は、アプリケーションを起動するためのウィンドウとLinux用のスクリプトを生成します(すべての依存関係jarを参照する生成されたパスを使用して、すべての依存関係を(target / appassemblerの下のlibフォルダーに)ダウンロードします。その後、アセンブリプラグインを使用して全体をパッケージ化できますappassemblerディレクトリをzipに、jarとともにリポジトリにインストール/デプロイします。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>generate-jsw-scripts</id>
<phase>package</phase>
<goals>
<goal>generate-daemons</goal>
</goals>
<configuration>
<!--declare the JSW config -->
<daemons>
<daemon>
<id>myApp</id>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<commandLineArguments>
<commandLineArgument>start</commandLineArgument>
</commandLineArguments>
<platforms>
<platform>jsw</platform>
</platforms>
</daemon>
</daemons>
<target>${project.build.directory}/appassembler</target>
</configuration>
</execution>
<execution>
<id>assemble-standalone</id>
<phase>integration-test</phase>
<goals>
<goal>assemble</goal>
</goals>
<configuration>
<programs>
<program>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<!-- the name of the bat/sh files to be generated -->
<name>mymain</name>
</program>
</programs>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<repositoryLayout>flat</repositoryLayout>
<repositoryName>lib</repositoryName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/archive.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
ディレクトリをzipとしてパッケージ化するためのアセンブリ記述子(src / main / assembly)は次のようになります。
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
プロジェクトをwarまたはearタイプのmavenにすると、依存関係がコピーされます。
Shadeプラグインを使用して、すべてのサードパーティの依存関係をバンドルできるuber jarを作成できます。
すでに簡潔に述べられていることを説明するためだけに。コードと一緒に依存関係を含む実行可能JARファイルを作成したいと思いました。これは私のために働きました:
(1)pomの<build> <plugins>の下に、以下を含めました:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
(2)mvn compile assembly:assemblyを実行すると、プロジェクトのターゲットディレクトリに目的のmy-project-0.1-SNAPSHOT-jar-with-dependencies.jarが生成されました。
(3)java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jarを使用してJARを実行しました
それは重い依存関係を埋め込むための重い解決策ですが、Mavenのアセンブリプラグインが私にとってはトリックを行います。
@ リッチセラーの答えは機能するはずですが、より単純なケースでは、使用ガイドからのこの抜粋のみが必要です:
<project>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
EclipseのTomcatサーバーで実行しているときにWEB-INF / libファイルに表示されない依存関係に関連する問題が発生している場合は、以下をご覧ください。
Tomcatの起動時にClassNotFoundException DispatcherServlet(Mavenの依存関係がwtpwebappsにコピーされない)
プロジェクトのプロパティ>デプロイメントアセンブリでMavenの依存関係を追加するだけです。