SORU
29 Kasım 2009, Pazar


Sorun bina maven ile çalıştırılabilir jar

Küçük bir ev projesi "" maven kullanarak, sadece bu gibi: . logmanager adında çalıştırılabilir bir jar oluşturmak için çalışıyorum

http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven

Bu parçacık için orada gösterilen pom.xml ve mvn montaj:montaj koştu ekledim. Logmanager/hedef iki kavanoz dosyaları oluşturur: logmanager-0.1.0.jar ve logmanager-0.1.0-jar-with-dependencies.jar. Ben çift ilk kavanoz ne zaman bir hata alıyorum:

Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit.

-İ çift ne zaman biraz farklı bir hata jar-with-dependencies.jar:

Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar

Kopyaladım ve yol ve Code yapıştırılan ve POM yazımı kontrol ettim. Benim ana sınıfı bir güneş tutulması lansmanı İyi Yapılandırma başlattı. Biri bana jar dosyası çalışmıyor neden anlamaya yardımcı olabilir? Ayrıca, neden ile başlamak için iki kavanoz var mı? Eğer daha fazla bilgiye ihtiyacınız varsa bana bildirin.

Teşekkürler!

[Edit: benim POM şimdi şöyle:]

<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>com.gorkwobble</groupId>
  <artifactId>logmanager</artifactId>
  <name>LogManager</name>
  <version>0.1.0</version>
  <description>Systematically renames specified log files on a scheduled basis. Designed to help manage MUSHClient logging and prevent long, continuous log files.</description>
  <build>
    <plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    	    <artifactId>maven-jar-plugin</artifactId>
    	    <version>2.2</version>
    	    <!-- nothing here -->
    	</plugin>
    	<plugin>
    	    <groupId>org.apache.maven.plugins</groupId>
    	    <artifactId>maven-assembly-plugin</artifactId>
    	    <version>2.2-beta-4</version>
    	    <configuration>
    	      <descriptorRefs>
    	        <descriptorRef>jar-with-dependencies</descriptorRef>
    	      </descriptorRefs>
    	      <archive>
    	        <manifest>
    	          <mainClass>com.gorkwobble.logmanager.LogManager</mainClass>
    	        </manifest>
    	      </archive>
    	    </configuration>
    	    <executions>
    	      <execution>
    	        <phase>package</phase>
    	        <goals>
    	          <goal>single</goal>
    	        </goals>
    	      </execution>
    	    </executions>
    	  </plugin>
    	  <plugin>
    	    <groupId>org.apache.maven.plugins</groupId>
    	    <artifactId>maven-compiler-plugin</artifactId>
    	    <configuration>
    	      <source>1.6</source>
    	      <target>1.6</target>
    	    </configuration>
    	  </plugin>
    </plugins>
  </build>
  <dependencies>
    <!-- commons-lang -->
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.4</version>
    </dependency> 

    <!-- Quartz scheduler -->
    <dependency>
    	<groupId>opensymphony</groupId>
    	<artifactId>quartz</artifactId>
    	<version>1.6.3</version>
    </dependency>
    <!-- Quartz 1.6.0 depends on commons collections -->
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.1</version>
    </dependency>
    <!-- Quartz 1.6.0 depends on commons logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1</version>
    </dependency>
    <!-- Quartz 1.6.0 requires JTA in non J2EE environments -->
    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
      <version>1.1</version>
      <scope>runtime</scope>
    </dependency>

    <!-- junitx test assertions -->
    <dependency>
        <groupId>junit-addons</groupId>
        <artifactId>junit-addons</artifactId>
        <version>1.4</version>
        <scope>test</scope>
    </dependency>

    <!-- junit dependency; FIXME: make this a separate POM -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.1</version>
    </dependency>

  </dependencies>
  <dependencyManagement>
  </dependencyManagement>
</project>

CEVAP
29 Kasım 2009, Pazar


Aslında bahsettiğiniz cevap question verilen sadece olduğunu düşünüyorumyanlış(GÜNCELLEME - 20101106:birisi sabitbuversion preceding the edit başvurduğu cevap) ve bu sıkıntılar içine çalıştırmak neden, en azından kısmen, açıklıyor.


Logmanager/hedef iki kavanoz dosyaları oluşturur: logmanager-0.1.0.jar ve logmanager-0.1.0-jar-with-dependencies.jar.

İlk logmanager modülü jar:jar package aşamasında oluşturulan modül 16 ** yazın bir ambalaj olduğundan () KAVANOZ. İkinci bir derleme assembly:assembly tarafından oluşturulur ve geçerli modül ve bağımlılıkları, sınıflar ise tanımlayıcısı jar-with-dependencies kullandıysanız () içermelidir.

Ben çift ilk kavanoz ne zaman bir hata alıyorum:

Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit.

Eğer bağlantı referans olarak gönderildi önerilen yapılandırma uygulanmış, kavanoz eklentisi yürütülebilir bir obje, böyle bir şey üretmek için yapılandırılmış:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <mainClass>com.gorkwobble.logmanager.LogManager</mainClass>
        </manifest>
      </archive>
    </configuration>
  </plugin>

logmanager-0.1.0.jar yürütülebilir ama 1 gerçekten de öyle. bu tüm bağımlılıkları olmadığından () ne istediğinizi ve 2. değil com.gorkwobble.logmanager.LogManager (Bu hata der kavanoz içeriğini kontrol) içermez.

-İ çift ne zaman biraz farklı bir hata jar-with-dependencies.jar:

Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar

Eğer önerdiği gibi Meclis eklentisi yapılandırılmış yine, şöyle bir şey var:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
  </plugin>

, logmanager-0.1.0-jar-with-dependencies.jar Bu Kur ile içeren cari modülünden sınıflarıvebağımlılıklarından ama, hata, META-INF/MANIFEST.MF göreyokMain-Class girişi (aynı değil onun Olası BİLDİRİM içerir.MF logmanager-0.1.0.jar gibi). Kavanoz aslındadeğilyürütülebilir, yine istediğiniz bir şey değildir.


Dolayısıyla, benim önerim maven-kavanoz-eklenti ve maven-montaj-eklenti bu gibi yapılandırın: configuration elementi kaldırmak olacaktır

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <!-- nothing here -->
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-4</version>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive>
        <manifest>
          <mainClass>org.sample.App</mainClass>
        </manifest>
      </archive>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Tabii ki, sınıfla org.sample.App yerine idam istiyorum. Küçük bir bonus, assembly:assembly daha fazla koşmak zorunda kalmazsın package Faz assembly:single bağlı oldum. Sadece çalıştırın mvn install Kurul standart yapı sırasında üretilecek.

Bu yüzden, lütfen yapılandırma yukarıda verilen ile pom.xml güncelleme ve mvn clean install çalıştırın. Sonra, target dizine cd ve tekrar deneyin:

java -jar logmanager-0.1.0-jar-with-dependencies.jar

Eğer bir hata alırsanız, bu sorunuza güncelleme ve META-INF/MANIFEST.MF dosya içeriğini ve ilgili kısmı gönderin pom.xml (eklentileri yapılandırma bölümleri). Ayrıca sonucu gönderin:

java -cp logmanager-0.1.0-jar-with-dependencies.jar com.gorkwobble.logmanager.LogManager

bunu göstermek için komut satırı (tutulma ne söylediğini ne olursa olsun) gayet iyi çalışıyor.

EDİT: yapılandırmak için gereken 6, maven-derleyici-plugin. Java İçin Senin pom.xml bunu ekleyin:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005