it-swarm-tr.com

maven'i bağımlılıkları hedef/lib'e kopyalamak

Projemin çalışma zamanı bağımlılıklarının target/lib klasörüne kopyalanmasını nasıl sağlarım? 

Şu anda olduğu gibi, mvn clean install'den sonra target klasörü yalnızca projemin kavanozunu içerir, ancak çalışma zamanı bağımlılıklarının hiçbirini içermez.

226
Michael

Bu benim için çalışıyor:

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

En iyi yaklaşım ne yapmak istediğinize bağlıdır:

  • Bağımlılıklarınızı bir WAR veya EAR dosyasına paketlemek istiyorsanız, projenizin ambalaj türünü EAR veya WAR olarak ayarlayın. Maven bağımlılıkları doğru yere toplayacaktır.
  • Kodunuzu tüm bağımlılıklarınızla birlikte içeren bir JAR dosyası oluşturmak istiyorsanız, Assembly eklentisini with-bağımlılıklarla tanımlayıcısını kullanın. Maven, tüm sınıflarınızla birlikte herhangi bir bağımlılık sınıfları ile birlikte eksiksiz bir JAR dosyası oluşturacaktır.
  • Bağımlılıklarınızı hedef dizine etkileşimli olarak basitçe çekmek istiyorsanız, dosyalarınızı kopyalamak için bağımlılık eklentisini kullanın.
  • Başka bir işlem türü için bağımlılıkları kullanmak istiyorsanız, muhtemelen kendi eklentinizi oluşturmanız gerekecektir. Bağımlılık listesini ve bunların diskteki yerlerini almak için API'ler var. Oradan almak zorundasın ...
79
John Stauffer
mvn install dependency:copy-dependencies 

Benim için hedef klasörde oluşturulan bağımlılıklar diziniyle çalışır. Beğen

66
user3286149

Maven bağımlılık eklentisi 'e bir bakın, özellikle, bağımlılık: kopya bağımlılıkları hedefi . örnek başlığına bakınız. Bağımlılık: kopya bağımlılıkları mojo . outputDirectory configuration özelliğini $ {basedir}/target/lib olarak ayarlayın (test etmek zorunda kalacağınıza inanıyorum).

Bu yardımcı olur umarım.

34

Birinin bağımlılıklarını başka bir maven aşaması kullanmadan bir hedef dizine kopyalaması gereken durum için basit ve zarif bir çözüm (Vaadin ile çalışırken bunu çok faydalı buldum).

Komple pom örneği:

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

Ardından mvn process-sources komutunu çalıştırın

Jar dosyası bağımlılıkları /target/dependency içinde bulunabilir.

30
ruhsuzbaykus

Bunu zaman zaman yapmak istiyorsanız (ve dolayısıyla POM'unuzu değiştirmek istemiyorsanız), bu komut satırını deneyin:

target/dependencies içine yerleştirilir.

22
Duncan Jones

Böyle bir şey dene:

<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

Tek ihtiyacınız olan pom.xml's build/plugins içinde aşağıdaki kod parçası:

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

Çalıştırdığınızda yukarıdakiler package aşamasında çalışır. 

mvn clean package

Bağımlılıklar, snippet'te belirtilen outputDirectory'e, yani bu durumda lib'a kopyalanacaktır.

Bunu yalnızca zaman zaman yapmak istiyorsanız, pom.xml dosyasında değişiklik yapmanız gerekmez. Basitçe aşağıdakini çalıştırın:

mvn clean package dependency:copy-dependencies

${project.build.directory}/dependencies olan varsayılan konumu geçersiz kılmak için outputDirectory adlı bir System özelliği ekleyin, örn.

    -DoutputDirectory=${project.build.directory}/lib
12
isapir

varsayarak

  • pom.xml dosyasını değiştirmek istemiyorsunuz
  • test kapsamı (örn. junit.jar) veya sağlanan bağımlılıklar (örneğin, wlfullclient.jar) istemiyorsanız

işte benim için işe yarayan şey:

 mvn kurulum bağımlılığı: copy-bağımlılıklar -DincludeScope = runtime -DoutputDirectory = target/lib 
6
mambolis

Uygulama kavanozunuzun bir paketini, tüm bağımlılıkları ve MainClass'ı çağırmak için bazı komut dosyaları ile birlikte göndermek istiyorsanız, appassembler-maven-plugin .

Aşağıdaki yapılandırma, uygulamayı başlatmak için Window ve Linux için komut dosyaları üretecektir (tüm bağımlılık kavanozlarına atıfta bulunarak oluşturulan bir yolla, tüm bağımlılıkları indirir (hedef/appassembler altındaki bir lib klasörüne). Assembly Eklentisi sonra tüm appassembler dizini kavanoz ile birlikte depoya kurulan/konuşlandırılan bir Zip'e paketlemek için kullanılabilir.

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

Dereceyi bir Zip olarak paketlemek için derleme tanımlayıcısı (src/main/Assembly'de):

<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

Projenizi bir savaş ya da kulak tipi yaparsanız, maven bağımlılıkları kopyalar.

2
Eduard Wirch

Shade Plugin uygulamasını kullanarak 3. parti bağımlılıklarınızın tümünü paketleyebileceğiniz bir uber kavanozu oluşturabilirsiniz.

1
Brian Matthews

Sadece kısaca söylenenleri hecelemek için. Kodumla birlikte bağımlılıklarımı içeren yürütülebilir bir JAR dosyası oluşturmak istedim. Bu benim için çalıştı:

(1) Pommanda, <build> <fişleri> altında aşağıdakileri dahil ettim:

<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) Koşu mvn derleme Meclisi: montaj projenin hedef dizininde istenen my-project-0.1-SNAPSHOT jar-with-bağımlıencies.jar dosyasını üretti.

(3) JAR'ı Java ile çalıştırdım-jar my-project-0.1-SNAPSHOT-jar-with-bağımlılıkları.jar

1
OleVV

Ağır bağımlılıkları gömmek için ağır bir çözüm, ancak Maven'in Montaj Eklentisi benim için hile yapıyor. 

@ Zengin Satıcı'nın cevabı çalışması gerekir, ancak daha basit durumlar için sadece kullanım kılavuzundan

<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’deki bir Tomcat sunucusunda çalışırken WEB-INF/lib dosyasında görünmeyen bağımlılıklarla ilgili sorun yaşıyorsanız, şunlara bir göz atın:

ClassNotFoundException DispatcherServlet Tomcat'i başlatırken (Maven bağımlılıkları wtpwebapps'a kopyalanmadı)

Maven Bağımlılıklarını Project Properties> Deployment Assembly'ye eklemeniz gerekiyordu.

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 oluşturulan jar bağımlılığı, herhangi bir lib sınıfı veya jar içermez 

0
user3123372