2010-11-22 15 views
8

ant kullanılan bir proje üzerinde çalışıyorum. Temel olarak jar temelini yapacak bir hedefim vardı ve uygulamayı bir dizine yükledim.'Dist' ile benzer herhangi bir maven hedefi var mı?

Bu bin/, lib/ ve yükleme dizininde config/ gibi dizinleri oluşturmak ve sonra bu dizinlerin her birine ilgili dosyaları kopyalamak olacaktır anlamına gelir.

Sorum şu iki yönlüdür:

  1. bu tür şeyleri yapar herhangi maven hedefi var mıdır?
  2. Değilse, maven dist yapmak istiyorum ve bunu gerçekleştirin. Bunu Maven'i kullanarak gerçekleştirmeyi nasıl önerirsiniz?
  3. Eğer kendi "hedefim" (dist gibi) alamıyorsam, en iyi yol ne olurdu?

Sonuç: Tüm bu yapmak istiyorum ama vb derleme ve paket gibi

Teşekkür varsayılan "hedefler" davranışını değiştirmek istemiyorum JRH

PS: Ben config içinde gider bilmiyorum maven versiyonunu 2.2.21

cevap

6

kullanıyorum, ancak lib ve bin kolaydır. copy all dependencies to a folder için

sadece bunu:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory> 
       ${project.build.directory}/dist/lib 
       </outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

çıkışı için kavanoz bir bin klasörüne şunu yapın (reference page):

:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <finalName>${project.artifactId}</finalName> 
     <outputDirectory>${project.build.directory}/dist/bin</outputDirectory> 
    </configuration> 
</plugin> 

Ah ek gereksinimleri vardır

Alt satır: Tüm bunları yapmak istiyorum, ancak c gibi varsayılan "hedeflerin" davranışını değiştirmek istemiyorum Eklemek yoksa sizin dist dizini almak için Şimdi mvn clean package -Pdist yapacağını

<profile> 
    <id>dist</profile> 
    <build> 
     <plugins> 
      <!-- insert stuff from above here --> 
     </plugins> 
    </build> 
</profile> 

ve: ompile ve bu durumda paket vb

Ben Bunu açmak için bir profil kullanmayı tercih ediyorum profil, varsayılan davranışı alırsınız.

Temel olarak, işler karıncaya benzer şekilde maven içinde farklı çalışır. Hedef yok, sadece yaşam döngüsü aşamaları ve eklenti hedefleri var. Eğer mvn compile yaparsanız

En fazla buna tüm aşamalarında bağlı tüm maven eklentisi hedeflerini arayacak bir yaşam döngüsü aşaması, yürütebileceği ya (örneğin aşağıdaki aşamaları çalıştırılacaktır: validate, initialize, generate-sources, process-sourcesgenerate-resources, process-resources, compile). Fakat dist adında bir yaşam döngüsü aşaması tanımlamanın (kolay) bir yolu yoktur.Veya belirli bir eklenti hedefini yürütebilirsiniz (gerçekte birden fazla faz ve/veya eklenti hedefi gerçekleştirebilirsiniz). Örneğin. kendi dist eklentinizi yazabilir ve mvn dist:dist kullanarak arayabilirsin, ancak varolan işlevselliği kullandığınızdan ve profil çözümünün oldukça iyi bir uyum sağladığından tavsiye etmem.

+0

tamam, peki bu eylem nasıl başlıyor? Mvn paketi çalıştırıyor muyum? Maven dist gibi bir şey yapmak ve bunu yapmak (bunu bu konuda güncelledim) yapmak istiyorum. Bu mümkün mü? – jrharshath

+0

+1 hm, yardımcı. Soru: Paket yaşam döngüsünde veya dağıtımda yapmak istediğimi yapmalı mıyım? ve neden? – jrharshath

+0

@simpatico Bu sorunun cevabına değil, sorusuna bir yorum olması gerektiğini düşünüyorum, değil mi? –

0

Sen (Sean tarafından önerildiği gibi, ya mvn clean package -Pdist) Eğer mvn install -Pdist olarak yürüten bir custom actiondist oluşturabilir (inanıyorum ve diğer IDE) NetBeans ile maven dist, olamaz.

1

assembly plugin için assembly descriptor yazmayı deneyebilirsiniz (ya da uygun bir arama için google'da arama yapabilirsiniz). Bu

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
    "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 
     http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

    <id>dist</id> 
    <formats><format>zip</format></formats> 

    <fileSets> 
    <fileSet> 
     <directory>src/main/config</directory> 
     <outputDirectory>config</outputDirectory> 
     <useDefaultExcludes>true</useDefaultExcludes> 
    </fileSet> 
    </fileSets> 

    <files> 
    <file> 
     <source>${project.build.directory}/${project.artifactId}.jar</source> 
    </file> 
    </files> 

    <dependencySets> 
    <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

gibi

şey mi target dizinde içinde ${project.artifactId}-dist.zip yaratacaktır. zip dosyası

montaj eklenti yalnızca sıkıştırılmış dosyaları yaratacak gibi görünüyor
yourProjectName/ 
yourProjectName/config/... 
yourProjectName/lib/... 
yourProjectName/${project.artifactId}.jar 

gibi düzenlenir, bu sadece bir dist klasöre kopyalamak olmaz.

1

Seans'ın cevabı iyidir ve appassembler eklentisi http://mojo.codehaus.org/appassembler/appassembler-maven-plugin/ hakkında bilgi alana kadar neredeyse gittim.

örnek https://github.com/khmarbaise/maven-training/tree/master/502-assembly-plugin

Bu paket yaşam döngüsünün bir parçası olarak adlandırılır için buraya bakınız.

<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
     <execution> 
     <phase>prepare-package</phase> 
     <goals> 
      <goal>assemble</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <binPrefix>utility</binPrefix> 
     <assembleDirectory>${project.build.directory}/appassembler</assembleDirectory> 
     <extraJvmArguments>-Xms512m -Xmx1024m</extraJvmArguments> 
     <generateRepository>false</generateRepository> 
     <repositoryName>lib</repositoryName> 
     <repositoryLayout>flat</repositoryLayout> 
     <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath> 
     <platforms> 
     <platform>windows</platform> 
     <platform>unix</platform> 
     </platforms> 
     <programs> 
     <program> 
      <mainClass>com.soebes.tools.cli.UtilityCLI</mainClass> 
      <name>utility</name> 
     </program> 
     </programs> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
     <descriptors> 
     <descriptor>src/main/assembly/bin.xml</descriptor> 
     <descriptor>src/main/assembly/bin-unix.xml</descriptor> 
     <descriptor>src/main/assembly/src.xml</descriptor> 
     </descriptors> 
     <tarLongFileMode>gnu</tarLongFileMode> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

tanıtıcısı referanslar oldukça straigtforward ve o da size uygulamayı çalıştırmak için bir toplu ve shell script yaratır!

İlgili konular