2009-06-14 4 views
0

Ich habe versucht, eine JAR-Datei aus einem Java-Projekt, das einige externe Gläser verwendet. Ich habe einen lib-Ordner erstellt und alle benötigten Gläser dort abgelegt.Ungültige oder Corupt JAR-Datei

Ich führe das Projekt in Eclipse durch Hinzufügen aller Gläser im lib-Ordner zum Build-Pfad und es funktioniert ok.

Wenn ich versuche, das Glas mit Ant aus build.xml zu erstellen, scheint es in Ordnung, kein Fehler wird angezeigt.

Wenn ich versuche, das Glas zu starten, bekomme ich die Meldung "Ungültige oder korrupte JAR-Datei".

In build.xml: definiere ich den Weg zum Kompilieren zu verwenden:

<target name="compile" depends="init" description="compile the source " > 
    <!-- Compile the java code from ${src} into ${build} --> 
    <javac srcdir="${src}" destdir="${build}"> 
      <classpath refid="project.classpath"/> 
    </javac> 
</target> 

Und dies ist das Ziel für die Herstellung des Glases:

<path id="project.classpath"> 
    <fileset dir="${lib}"> 
     <include name="**/*.jar"/> 
    </fileset> 
</path> 

Das das Ziel für die Zusammenstellung ist Datei:

<target name="dist" depends="compile" description="generate the distribution" > 
     <mkdir dir="${dist}"/> 
     <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> 
     <jar jarfile="${dist}/MyProject-${DSTAMP}.jar" basedir="${build}"> 
      <manifest> 
      <attribute name="Main-Class" value="${main}" /> 
      <attribute name="Class-Path:" value="lib/**/*.*"/> 
      </manifest> 
      <fileset dir="${src}" includes="images/**/*.*" /> 
     </jar> 
     <echo file="${dist}/start.bat" message="java -jar MyProject-${DSTAMP}.jar" /> 
    </target> 

Können Sie mir bitte sagen, was habe ich falsch gemacht?

Antwort

4

zuerst den Doppelpunkt nach Class-Path: zu reflektieren

übereinstimmen

dann schlage ich

HOWTO Create MANIFEST.MF Classpath From Ant oder besser lesen Manifestclasspath mit

+0

Es funktionierte mit dem manifestclasspath. Das Problem war in der Tat, dass die Jar Namen viel zu lang waren als die 72 erlaubten Zeichen. –

+0

Zeilen in MANIFEST.MF sind wrappable. Ich denke auch, der Schuldige ist der zusätzliche Doppelpunkt. –

+0

+1 für den Manifestclasspath. Habe die neuen Goodies seit dem 1.6.2 nicht mehr angeschaut, also ist das eine nette Ergänzung. –

1

Ich glaube nicht, dass Ihr Class-Path-Attribut einen abschließenden Doppelpunkt in Ihrem build.xml angegeben haben sollte.

Try

jar tvf {jarname} 

von der Kommandozeile aus, und sehen, ob das Ihre JAR-Datei erweitern können, und ob es enthält, was Sie erwarten (die oben wird einfach das Inhaltsverzeichnis Dump, sondern ist ein nützliches überprüfen)

EDIT: Changed das Feedback unter

+0

Ich habe auch versucht, diese Version: Und immer noch nicht funktioniert –

+0

Wenn Sie in Ihrer Manifest-Datei suchen, werden Sie sehen, dass geschrieben. Aber sind die Klassen tatsächlich in Ihrer .jar-Datei? –

+0

Ich öffnete das Glas und es schien alles zu enthalten. Zumindest alle Klassen und Dateien im Projekt. Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Erstellt-By: 11.0-b15 (Sun Microsystems Inc.) Main-Klasse: controller.Client Class-Path :: lib/**/* .jar –

Verwandte Themen