2010-06-15 7 views
1

J'essaie de créer un fichier JAR exécutable à partir de classes Java en utilisant ant. Les classes Java utilisent des fichiers externes. Lorsque j'exécute le fichier build.xml, il affiche l'exception de classe introuvable lors de l'exécution du programme Java. Sa compilation bien.Exécuter un fichier jar en utilisant Ant

Une partie de mon code source:

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

<path id="project-classpath"> 
    <fileset dir="C:/xmldecode/lib"> 
     <include name="*.jar"/> 
    </fileset> 
</path> 

<target name="compile" depends="prepare">    
    <javac srcdir="${src.dir}" destdir="${classes.dir}">  
     <classpath refid="project-classpath"/> 
    </javac> 
</target> 

<target name="jar" depends="compile"> 
    <copy todir="${classes.dir}">  
     <fileset dir="C:/xmldecode/lib"/>  
    </copy> 

    <pathconvert property="mf.classpath" pathsep=";"> 
     <path refid="project-classpath" /> 
     <flattenmapper /> 
    </pathconvert> 

    <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> 
     <manifest> 
      <attribute name="Main-Class" value="${main-class}"/> 
      <attribute name="Class-Path" value="${mf.classpath}"/> 
     </manifest> 
    </jar> 
</target> 


<target name="run" depends="jar"> 
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">  
    </java> 

Répondre

1

Votre problème est que les entrées de classpath manifestes ne sont pas séparés par un ";" personnage. Ce qui suit fonctionnera mieux, je pense:

<pathconvert property="mf.classpath" pathsep=" "> 
    <path refid="project-classpath" /> 
    <flattenmapper /> 
</pathconvert> 

Puis-je suggérer en utilisant la nouvelle tâche ANT manifestclasspath?

<manifestclasspath property="mf.classpath" jarfile="${jar.dir}/${ant.project.name}.jar"> 
    <classpath refid="project-classpath" /> 
</manifestclasspath> 

Cette méthode puissante déterminera les chemins relatifs à l'emplacement du pot, par exemple, si les dépendances du pot sont situés dans un répertoire lib

Questions connexes