web-dev-qa-db-ja.com

Mavenに依存関係をtarget / libにコピーさせる

プロジェクトのランタイム依存関係をtarget/libフォルダーにコピーするにはどうすればよいですか?

現時点では、mvn clean installの後のtargetフォルダーには、プロジェクトのjarのみが含まれていますが、ランタイム依存関係は含まれていません。

234
Michael

これは私のために働く:

<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>
240
Georgy Bolyuba

最適なアプローチは、何をしたいかによって異なります。

  • 依存関係をWARまたはEARファイルにバンドルする場合は、プロジェクトのパッケージングタイプをEARまたはWARに設定するだけです。 Mavenは依存関係を適切な場所にバンドルします。
  • コードとすべての依存関係を含むJARファイルを作成する場合は、 Assembly プラグインとjar-with-dependencies記述子。 Mavenは、すべてのクラスと依存関係のクラスを含む完全なJARファイルを生成します。
  • 依存関係を単純にターゲットディレクトリに対話形式でプルする場合は、 dependency プラグインを使用してファイルをコピーします。
  • 他の種類の処理の依存関係を取得する場合は、おそらく独自のプラグインを生成する必要があります。依存関係のリストとディスク上のそれらの場所を取得するAPIがあります。あなたはそこからそれを取る必要があります...
80
John Stauffer
mvn install dependency:copy-dependencies 

ターゲットフォルダーに作成された依存関係ディレクトリで動作します。いいね!

67
user3286149

Maven依存プラグイン 、特に dependency:copy-dependenciesゴール をご覧ください。見出しの下の を見てください。dependency:copy-dependencies mojooutputDirectory構成プロパティを$ {basedir}/target/libに設定します(テストする必要があると思います)。

お役に立てれば。

33

Mavenの他のフェーズを使用せずに依存関係をターゲットディレクトリにコピーする必要がある場合のシンプルでエレガントなソリューション(これはVaadinで作業するときに非常に便利です)。

完全なポンの例:

<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にあります。

30
ruhsuzbaykus

これをときどき実行したい(したがって、POMを変更したくない)場合は、次のコマンドラインを試してください。

mvndependency:copy-dependencies -DoutputDirectory = $ {project.build.directory}/lib

最後の引数 を省略すると、依存関係はtarget/dependenciesに配置されます。

23
Duncan Jones

次のようなものを試してください:

<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>
20
adjablon

必要なのは、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
12
isapir

仮に

  • pom.xmlを変更したくない
  • テストスコープ(例:junit.jar)または提供された依存関係(例:wlfullclient.jar)を望まない

ここに私のために働いたものがあります:

 mvnインストール依存関係:コピー依存関係-DincludeScope = runtime -DoutputDirectory = target/lib 
7
mambolis

アプリケーションjarのバンドルを、そのすべての依存関係とMainClassを呼び出すいくつかのスクリプトとともに配信する場合は、 appassembler-maven-plugin を確認してください。

次の構成は、アプリケーションを起動するためのWindowおよびLinux用のスクリプトを生成します(すべての依存関係jarを参照する生成されたパスを使用して、すべての依存関係を(target/appassemblerの下のlibフォルダーに)ダウンロードします) Assembly plugin can次に、appassemblerディレクトリ全体をZipにパッケージ化するために使用します。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>
5
Rich Seller

プロジェクトをwarまたはearタイプにすると、mavenは依存関係をコピーします。

2
Eduard Wirch

Shade Plugin を使用して、すべてのサードパーティの依存関係をバンドルできるuber jarを作成できます。

1
Brian Matthews

すでに簡単に述べられたことを説明するだけです。コードとともに依存関係を含む実行可能な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を実行しました

1
OleVV

重い依存関係を埋め込むための重い解決策ですが、Mavenの Assembly Plugin は私にとってはトリックです。

@ Rich Seller's answer は機能するはずですが、より単純な場合は 使用ガイド からの抜粋のみが必要です。

<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>
1
RubyTuesdayDONO

EclipseのTomcatサーバーで実行しているときにWEB-INF/libファイルに表示されない依存関係に関連する問題がある場合は、これを見てください。

Tomcatの起動時のClassNotFoundException DispatcherServlet(Maven依存関係はwtpwebappsにコピーされません)

[プロジェクトプロパティ]> [展開アセンブリ]でMaven依存関係を追加する必要がありました。

0
hemetsu
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.Edge</groupId>
  <artifactId>STORM2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>STORM2</name>
  <url>http://maven.Apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
   <profiles>

  </profiles>
<build>
    <plugins>   
          <plugin>
            <artifactId>maven-Assembly-plugin</artifactId>
             <configuration>
                <archive>
                <manifest>
                <mainClass>com.Edge.STORM2.LogAnalyserStorm</mainClass>
                </manifest>
                </archive>
                <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
          </plugin>

    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.Apache.storm</groupId>
    <artifactId>storm-core</artifactId>
    <version>1.1.1</version>
    <scope>provided</scope>
</dependency>
  </dependencies>
</project>

@ john これは私のPOMです。何か不足していますか?作成されたjar-依存関係、libクラスまたはjarを含まない

0
user3123372