2009-06-14 12 views
0

J'ai essayé de créer un fichier jar à partir d'un projet java, qui utilise des fichiers jar externes. J'ai créé un dossier lib et ai mis tous les pots dont j'ai besoin là.Jarfile non valide ou corrigé

Je lance le projet dans eclipse en ajoutant tous les jars dans le dossier lib au Build Path et cela fonctionne bien.

Lorsque j'essaie de créer le fichier jar avec ant de build.xml, cela semble correct, aucune erreur n'est affichée. Lorsque j'essaie d'exécuter le fichier jar, le message "Invalid or corupt jarfile" s'affiche.

En build.xml: Je définir le chemin à utiliser pour la compilation:

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

C'est la cible pour la compilation:

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

Et ceci est la cible pour faire le pot file:

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

Pouvez-vous me dire ce que j'ai fait de mal?

Répondre

4

d'abord enlever le côlon après Class-Path: pour correspondre

<attribute name="Class-Path" value="lib/**/*.*"/> 

Je vous suggère de lire

HOWTO Create MANIFEST.MF Classpath From Ant ou mieux en utilisant Manifestclasspath

+0

Cela a fonctionné avec le manifestclasspath. Le problème était en effet que les noms de pot étaient trop longs que les 72 caractères autorisés. –

+0

Les lignes de MANIFEST.MF sont encapsulables. Je pense aussi que le coupable est le colon supplémentaire. –

+0

+1 pour le Manifestclasspath. Je n'ai pas regardé les nouveaux goodies depuis 1.6.2, donc c'est une belle addition. –

1

Je ne pense pas que votre attribut Class-Path devrait avoir un deux-points de fin spécifié dans votre build.xml.

Essayez d'utiliser

jar tvf {jarname} 

de la ligne de commande, et voir si cela peut élargir votre fichier jar, et si elle contient ce que vous attendez (ci-dessus sera tout simplement vider la table des matières, mais est un utile vérifier) ​​

EDIT: modifié pour refléter les évaluations ci-dessous

+0

J'ai aussi essayé cette version: Et n'a toujours pas fonctionné –

+0

Si vous regardez dans votre fichier manifeste, vous verrez que écrit dans. Mais les classes sont réellement dans votre fichier .jar? –

+0

J'ai ouvert le pot et il semblait inclure tout. Au moins toutes les classes et tous les fichiers du projet. Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Créé par-: 11.0-b15 (Sun Microsystems Inc.) Main-Class: controller.Client Class-Path :: lib/**/* .jar –