2011-02-16 18 views
22

içinde çalıştırılabilir bağımlılıklar dizini oluştur "mvn clean install" çalışırken, çalıştırılabilir bir jar-with-bağımlılıkları oluşturmak için maven-assembly-plugin kullanın. Şimdi ilk önce çalıştırılamayan "name-version.jar" ve daha sonra "name-version-jar-with-dependencies.jar" dosyasını oluşturur.Yalnızca Maven

Bir şekilde, pom.xml'u yapılamıyor, bu nedenle çalıştırılamayan JAR dosyasını oluşturmuyor mu? Şu anda

Ben < > yanlış </appendAssemblyId > bu yüzden sadece ilk dosyayı üzerine yazar ...

Ayrıca birkaç olsun appendAssemblyId kullanmak mesajları "... zaten atlama ekledi". Onları bir şekilde önleyebilir miyim?

Bu maven-montaj-eklentisi tanımı içindedir benim pom.xml:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-5</version> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>my.main.class</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

değiştirme veya açıklayıcı kavanoz kaldırmak -with-bağımlılıkları. Ayrıca, 2.2 sürümü yerine 2.2 sürümü için montaj eklentisini güncelleyin. – khmarbaise

+0

Tamam, sürümü güncelledim. ama ben tanımlayıcıyı kaldırdığımda mesaj gelir: "Montajları okuma hatası: Montaj tanımlayıcıları bulunamadı." – phil

cevap

0

Belki soru hakkında bir şey eksik im ama şu kod bana tek çalıştırılabilir jar yapar: Bu aradığınız şey mi?

   <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.3.1</version> 
       <configuration> 
        <archive> 
          <manifest> 
           <addClasspath>true</addClasspath> 
           <mainClass>some.main.class</mainClass> 
          </manifest> 
        </archive> 
        <finalName>Proj-${project.version}</finalName> 
        <outputDirectory>target</outputDirectory> 
       </configuration> 
     </plugin> 
+2

Evet, cevapsız ya da açıkça bahsetmedim, bu yürütülebilir jardedeki bağımlılıklara ihtiyacım var. Bu yüzden maven-assembly-plugin bağımlılığı olan jarse ile kullanıyorum. – phil

1

Ayarlamayı deneyebilirsiniz. Bu, default kavanozu oluşturulmasını engelleyecektir.

<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"> 
    ... 
    <packaging>pom</packaging> 
    ... 
</project> 
+1

bu sınıf dosyaları final'e (tüm bağımlılıklar ile jar) kavanoza ekleyecek mi? – Nishant

+1

Nishant doğru, proje dosyam artık jar dosyasında değil ... – phil

3

Sanırım bunu nasıl yapacağımı anladım. Kavanozu terk etmelisiniz, aksi takdirde derleyiciyi ve kaynak kopyalamayı kaybedersiniz ve ihtiyacınız olan bir kavanoz oluşturmaya devam eden diğer her şey.

Çözümümün içerir esasen maven kandırma, bu yüzden ... konusunda dikkatli olmaları şey gelecek sürümlerde bu çalışmaz çok mümkün olmasıdır inşa yapılandırmasında listelenen

<build> 
    <defaultGoal>install</defaultGoal> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <finalName>dumpster-diver</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <archive> 
        <manifest> 
         <mainClass>DumpsterDiver</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    <finalName>${project.artifactId}</finalName> 
</build> 

Not tahmin , hem maven-assembly-plugin AND hem de build kendisi eşleşir. Ayrıca <appendAssemblyId>false</appendAssemblyId>'a da dikkat edin. Bunu yaparsanız, yapının ve montaj kavanozunun çıktı dosya adı tam olarak eşleşir. Maven bu konuda sizi kesinlikle uyacaktır, ancak istediğiniz dizini hedef dizininize ve yerel havuzunuza koyacaktır.

$ mvn clean install 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building dumpster-diver 
[INFO] task-segment: [clean, install] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [clean:clean {execution: default-clean}] 
[INFO] Deleting directory <currentDirectory>/target 
[INFO] [resources:resources {execution: default-resources}] 
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] Copying 1 resource 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] Compiling 1 source file to <currentDirectory>/target/classes 
[INFO] [resources:testResources {execution: default-testResources}] 
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] skip non existing resourceDirectory <currentDirectory>/src/test/resources 
[INFO] [compiler:testCompile {execution: default-testCompile}] 
[INFO] No sources to compile 
[INFO] [surefire:test {execution: default-test}] 
[INFO] No tests to run. 
[INFO] [jar:jar {execution: default-jar}] 
[INFO] Building jar: <currentDirectory>/target/dumpster-diver.jar 
[INFO] [assembly:single {execution: default}] 
[INFO] Processing DependencySet (output=) 
[WARNING] Artifact: <groupId>:dumpster-diver:jar:0.1.0-SNAPSHOT references the same file as the assembly destination file. Moving it to a temporary location for inclusion. 
[INFO] Building jar: <currentDirectory>/target/dumpster-diver.jar 
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing. 
Instead of attaching the assembly file: <currentDirectory>/target/dumpster-diver.jar, it will become the file for main project artifact. 
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-deterministic! 
[WARNING] Replacing pre-existing project main-artifact file: <currentDirectory>/target/archive-tmp/dumpster-diver.jar 
with assembly file: <currentDirectory>/target/dumpster-diver.jar 
[INFO] [install:install {execution: default-install}] 
[INFO] Installing <currentDirectory>/target/dumpster-diver.jar to /opt/m2repo/<groupId>/dumpster-diver/0.1.0-SNAPSHOT/dumpster-diver-0.1.0-SNAPSHOT.jar 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4 seconds 
[INFO] Finished at: Thu Aug 18 13:08:56 EDT 2011 
[INFO] Final Memory: 22M/618M 
[INFO] ------------------------------------------------------------------------ 
[email protected]:<currentDirectory> 
$ jar -tvf ./target/dumpster-diver.jar | grep -i "dump" 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    0 Thu Aug 18 13:08:56 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/ 
    2580 Thu Aug 18 13:01:46 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.xml 
     126 Thu Aug 18 13:08:54 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.properties 
[email protected]:<currentDirectory> 
$ jar -tvf /opt/m2repo/<groupId>/dumpster-diver/0.1.0-SNAPSHOT/dumpster-diver-0.1.0-SNAPSHOT.jar | grep -i "dump" 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    6831 Thu Aug 18 13:08:54 EDT 2011 DumpsterDiver.class 
    0 Thu Aug 18 13:08:56 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/ 
    2580 Thu Aug 18 13:01:46 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.xml 
    126 Thu Aug 18 13:08:54 EDT 2011 META-INF/maven/<groupId>/dumpster-diver/pom.properties 
0

Bu yapı kullanabilirsiniz: Burada

hedef dizinde ve yerel depoda kavanoz hem bu projede 'mvn temiz install' çıktısını yanı sıra kavanoz -tvf olduğunu

mvn temiz derleme montaj: ve aşağıdaki bu komutla derlemek tek

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>3.1.0</version> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>youMainClass</mainClass> 
         </manifest> 
        </archive> 

        <finalName>${artifactId}</finalName> 
        <appendAssemblyId>false</appendAssemblyId> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
     </plugin> 
    </plugins> 
</build>