Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème compilation avec ant

Sujet résolu
    15 janvier 2011 à 21:40:53

    Bonsoir,
    Je viens de développer une application Java sous Windows 7 avec Eclipse. J'ai voulu créer un build.xml pour pouvoir l'éxécuter sous linux mais j'ai ce problème qui apparait au moment de l'éxécution du .jar:

    [echo] === Execution ===
    [java] Exception in thread "main" java.lang.NoClassDefFoundError: ${main/class}
    [java] Caused by: java.lang.ClassNotFoundException: ${main.class}
    [java] at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    [java] at java.security.AccessController.doPrivileged(Native Method)
    [java] at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    [java] at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    [java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    [java] at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    [java] Java Result: 1
    [echo] Execution terminated !


    Voici ce qu'il y a dans mon fichier xml:
    <?xml version="1.0" encoding="UTF-8" ?> 
     <project name="jdv" default="execute" basedir=".">
     <!-- ================================================
      --> 
     <!--              The project description            
      --> 
     <!-- ================================================
      --> 
      <description>Ant Makefile for ${ant.project.name}</description> 
     <!-- ================================================
      --> 
     <!--              Some variable definition           
      --> 
     <!-- ================================================
      --> 
      <property environment="env" /> 
      <property file="build.properties" /> 
      <property name="src" value="${basedir}/src" /> 
      <property name="bin" value="${basedir}/bin" /> 
      <property name="build" value="${basedir}/build" /> 
      <property name="tests" value="${basedir}/check" /> 
      <property name="doc" value="${basedir}/doc" /> 
      <property name="binary" value="${basedir}/jdv.jar" /> 
      <property name="proj_fullname" value="${login}-${proj}" /> 
      <property name="tarball" value="${basedir}/${proj_fullname}.${extension}" /> 
      <property name="classpath" value="${basedir}/.classpath" /> 
     <!-- ================================================
      --> 
     <!--                     Condition                   
      --> 
     <!-- ================================================
      --> 
      <available file="${basedir}/AUTHORS" property="authors.exists" /> 
      <available file="${basedir}/TODO" property="todo.exists" /> 
      <available file="${basedir}/README" property="readme.exists" /> 
     <condition property="isUnix">
     <and>
      <os family="unix" /> 
     <not>
      <os family="mac" /> 
      </not>
      </and>
      </condition>
     <condition property="isWin">
      <os family="windows" /> 
      </condition>
     <condition property="isMac">
      <os family="mac" /> 
      </condition>
     <!-- ================================================
      --> 
     <!--            Custom classpath definition          
      --> 
     <!-- ================================================
      --> 
     <path id="custom.classpath">
      <pathelement location="${src}" /> 
      <pathelement location="${build}" /> 
      <pathelement location="${java.class.path}" /> 
      </path>
     <!-- ================================================
      --> 
     <!--                  Custom properties              
      --> 
     <!-- ================================================
      --> 
     <target name="initMac" description="Initialize Mac system" if="isMac">
      <property name="shell" value="sh" /> 
      <property name="exec-option" value="-c" /> 
     <!-- 	<property name="argNeededForMAC" value="-XstartOnFirstThread" /> 
      --> 
      <property name="jar" value="jar" /> 
      </target>
     <target name="initWindows" description="Initialize Windows system" if="isWin">
      <property name="shell" value="cmd.exe" /> 
      <property name="exec-option" value="/c" /> 
      <property name="argNeededForMAC" value="" /> 
      <property name="jar" value="jar" /> 
      </target>
     <target name="initUnix" description="Initialize Unix system" if="isUnix">
      <property name="shell" value="sh" /> 
      <property name="exec-option" value="-c" /> 
      <property name="jar" value="/usr/local/linux-sun-jdk1.6.0/bin/jar" /> 
      <property name="argNeededForMAC" value="" /> 
      </target>
     <target name="checkAUTHORS" description="Check if AUTHORS is present" unless="authors.exists">
      <fail message="You must have an AUTHORS file !" /> 
      </target>
     <target name="checkTODO" description="Check if TODO is present" unless="todo.exists">
      <fail message="You must have a TODO file !" /> 
      </target>
     <target name="checkREADME" description="Check if README is present" unless="readme.exists">
      <fail message="You must have a README file !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--     Initialization: create needed directories   
      --> 
     <!-- ================================================
      --> 
     <target name="init" depends="clean, initMac, initWindows, initUnix" description="Construct needed directories">
      <echo message="=== Initialization ===" /> 
      <mkdir dir="${build}" /> 
      <mkdir dir="${doc}" /> 
      <echo file="${basedir}/AUTHORS" append="false" message="* ${login}${line.separator}" /> 
      <echo message="Successfully created all needed directories !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--               Compile our project               
      --> 
     <!-- ================================================
      --> 
     <target name="compile" depends="init" description="Compile sources">
      <echo message="=== Compilation of ${src} ===" /> 
     <javac srcdir="${src}" destdir="${build}" debug="on" deprecation="on" optimize="off" fork="yes" verbose="yes">
     <classpath>
      <path refid="custom.classpath" /> 
      </classpath>
      <include name="${main.class}.java" /> 
      <include name="**/*.java" /> 
      </javac>
      <echo message="Successfully compiled in ${build} !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--                Create the jarfile               
      --> 
     <!-- ================================================
      --> 
     <target name="jar" depends="compile" description="Create the tarball">
      <delete file="${binary}" /> 
      <echo message="=== Creating the jar file ===" /> 
     <jar jarfile="${binary}" basedir="${build}">
      <fileset dir="${build}" includes="*/**" /> 
     <manifest>
      <attribute name="Main-Class" value="${main.class}" /> 
      <attribute name="Built-By" value="${login}" /> 
      <attribute name="Specification-Title" value="${proj}" /> 
      </manifest>
      </jar>
      <echo message="Successfully created the ${binary} jarfile !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--               Execute the project               
      --> 
     <!-- ================================================
      --> 
     <target name="execute" description="Execute the project">
      <echo message="=== Execution ===" /> 
      <java jar="${binary}" fork="true" /> 
      <echo message="Execution terminated !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--               Clean the main folder             
      --> 
     <!-- ================================================
      --> 
     <target name="cleanMain" description="Clean the main directory">
      <echo message="=== Cleaning main directory ===" /> 
      <delete dir="${build}" failonerror="false" /> 
      <echo message="Main directory successfully cleaned !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--                Clean the project                
      --> 
     <!-- ================================================
      --> 
     <target name="clean" depends="cleanMain" description="Clean all generated directory">
      <echo message="=== Cleaning project ===" /> 
     <delete>
      <fileset dir="${basedir}" includes="**/*~" /> 
      <fileset dir="${basedir}" includes="**/*.class" /> 
      <fileset dir="${basedir}" includes="**/*.tmp" /> 
      <fileset dir="${basedir}" includes="**/*.log" /> 
      </delete>
      <echo message="Project successfully cleaned !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--       Clean the project and delete executable   
      --> 
     <!-- ================================================
      --> 
     <target name="distclean" depends="clean" description="Clean binary and directory">
      <echo message="=== Distcleaning project ===" /> 
      <delete file="${binary}" failonerror="false" /> 
      <delete dir="${doc}" failonerror="false" /> 
      <delete dir="${bin}" failonerror="false" /> 
      <delete dir="${build}" failonerror="false" /> 
      <delete dir="${plugin}" failonerror="false" /> 
     <delete>
      <fileset dir="${basedir}" includes="**/*.tar" /> 
      <fileset dir="${basedir}" includes="**/*.gz" /> 
      <fileset dir="${basedir}" includes="**/*.tgz" /> 
      <fileset dir="${basedir}" includes="**/*.bz2" /> 
      <fileset dir="${basedir}" includes="**/*.zip" /> 
      <fileset dir="${basedir}" includes="**/*.rar" /> 
      </delete>
      <echo message="Project successfully distcleaned !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--       Generate the JavaDoc documentation        
      --> 
     <!-- ================================================
      --> 
     <target name="doc" description="Generate documentation">
      <echo message="=== Creating javadoc documentation ===" /> 
     <javadoc sourcepath="${src}" destdir="${doc}">
     <fileset dir="${src}" defaultexcludes="yes">
      <include name="**" /> 
      </fileset>
      </javadoc>
      <echo message="Javadoc documentation created in ${doc} !" /> 
      </target>
     <!-- ================================================
      --> 
     <!--                 Create the tarball              
      --> 
     <!-- ================================================
      --> 
     <target name="dist" depends="distclean" description="Create the tarball">
     <tar longfile="gnu" destfile="${tarball}" compression="${compression.mode}">
     <tarfileset dir="${basedir}" mode="700" username="${login}" prefix="${proj_fullname}/">
      <include name="**/*" /> 
      <exclude name=".*" /> 
      <exclude name="**/.svn" /> 
      <exclude name="**/*.gz" /> 
      <exclude name="**/*.bz2" /> 
      <exclude name="**/*.tgz" /> 
      <exclude name="**/*.tar" /> 
      <exclude name="**/*.zip" /> 
      <exclude name="**/*.rar" /> 
      </tarfileset>
      </tar>
      </target>
     <!-- ================================================
      --> 
     <!--         Create the tarball (alias of dist)      
      --> 
     <!-- ================================================
      --> 
      <target name="tar" depends="dist" description="Create the tarball" /> 
     <!-- ================================================
      --> 
     <!--         Custom classpath definition    
      --> 
     <!-- ================================================
      --> 
     <path id="custom.classpath">
      <pathelement location="${src}" /> 
      <pathelement location="${build}" /> 
      <pathelement location="${java.class.path}" /> 
      </path>
     <!-- ================================================
      --> 
     <!--           Create dir check and compile tests    
      --> 
     <!-- ================================================
      --> 
     <target name="compile-test">
      <mkdir dir="classes.dir" /> 
      <javac srcdir="${tests}" destdir="classes.dir" /> 
      </target>
      </project>
    


    Je ne comprend pas pourquoi. Sous windows avec Eclipse j'avais bien inclut le main... Merci pour votre précieuse aide.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 janvier 2011 à 21:52:09

      tu peux aussi poster build.properties? parce que je vois nul part la valeur associée à la clé ${main.class}
      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2011 à 22:00:18

        Je n'ai pas de build.properties...
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          15 janvier 2011 à 22:19:49

          dans ton script y a des variables, si tu donne pas de valeur a ces variables c'est normal que ca fonctionne pas, soit tu les initialise dans le script lui même, soit dans le fichier properties spécifié dans le script.

          Le mieux est d'aller lire un minimum la doc d'ant histoire que tu comprennes au moins ce que tu utilises, prendre un script tout fait auquel tu comprends rien ne fait pas gagner du temps, c'est même plutôt le contraire.
          • Partager sur Facebook
          • Partager sur Twitter

          Problème compilation avec ant

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown