IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Execution compilation en code Java


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Par défaut Execution compilation en code Java
    Bonjour,

    J'aimerai exécuter une compilation d'un projet automatique (qui a son fichier build.xml) à partir d'un autre projet. Je travaille sur une application déployer sur un web serveur glassfish, qui compile un projet dont le nombre de jars inclus dedans peut varier.
    En ce moment, j'essaie plutôt de compiler un projet helloworld en local par le biais d'un autre projet, mais sans succès.
    Avec les outils de Ant je n'ai pas réussi, j'ai suivi les infos écrites ici : http://www.onjava.com/pub/a/onjava/2...to.html?page=1 mais j'ai une exception classnotfound. Etant donné que j'ai pas tout compris, je pense que mon code est faux
    Sinon j'ai aussi essayé avec les commandes javac et jar en passant par Runtime.getRuntime().exec, il n'y a pas d'erreur mais pas de jar non plus...
    Si quelqu'un peut me guider pour faire cette petite appli.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    La meilleure solution est je pense de passer par l'API Java de Ant (sans Runtime.exec) comme ça tu gardes la portabilité.
    Juste comme ça et à l'aveugle car je ne sais pas quelle est ton erreur : As tu la bibliothèque ant dans ton classpath ?

    A plus

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Par défaut
    Salut Georges,

    Oui déja j'ai vu que j'ai oublié de mettre la librairie ant-launcher. Maintenant j'ai plus cette erreur.
    Par contre, je ne sais pas comment faire qu'il execute tout le fichier build.xml. Voici le debut du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Project ant = new Project();
            ProjectHelper helper = new ProjectHelperImpl();
            org.apache.tools.ant.DefaultLogger log = new org.apache.tools.ant.DefaultLogger();
     
            log.setErrorPrintStream(System.err);
            log.setOutputPrintStream(System.out);
            log.setMessageOutputLevel(Project.MSG_INFO);
            ant.addBuildListener(log);
            ant.init();
            helper.parse(ant, new File("F:\\Documents\\NetBeansProjects\\HelloMobile\\build.xml"));
            ant.executeTarget("toto");
    Dans l'exemple que j'ai regardé, il exécute chaque target. J'ai essayé de exécuter une Target mais il répond qu'il n'existe pas alors qu'il est bien présent. Autre chose, c'est netbeans qui me génère le fichier build.xml, dans lequel il se trouve juste un import d'un autre fichier xml (nbproject\build-impl.xml) avec une tonne de lignes...
    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pourquoi ne pas utiliser le build.xml qui contient vraiment les cibles ?
    De ce que j#ai compris ta cible "toto" n'est pas dans le build.xml que tu ouvres mais celui ci se contente d'importer un autre build.xml qui est peut-être plus présent quand tu exécutes. Ce deuxième fichier contient tes cibles ? Essaie directement avec le bon fichier

    PS : je ne sais pas ce que génère netbeans, mais si c'est comme eclipse, le script est horrible avec des chemins en dur ou relatif au projet eclipse, ce qui n'est pas vraiment réutilisable. C'est peut-être pas drôle mais il va falloir retravailler les fichiers si tu les as générés automatiquement

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Par défaut
    J'ai créé mon fichier build.xml et lorsque je l'execute par un autre programme, j'ai une exception, il ne trouve pas le compilateur javac :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     [javac] Compiling 1 source file to F:\Documents\NetBeansProjects\HelloMobile\build
    Exception in thread "main" F:\Documents\NetBeansProjects\HelloMobile\build.xml:12: Unable to find a javac compiler;
    com.sun.tools.javac.Main is not on the classpath.
    Perhaps JAVA_HOME does not point to the JDK.
    It is currently set to "C:\Program Files\Java\jdk1.6.0_10\jre"
    Pourtant mes variables d'environnement me semble bien parametrées (JAVA_HOME, PATH et ANT_HOME).
    Voici mon fichier buidl.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <project name="HelloMobile" default="jar" basedir=".">
        <description>Builds, tests, and runs the project.</description>
            <property name="src" value="."/>
    		<property name="build" value="build"/>
    		<target name="compile">
              <mkdir dir="build"/>
              <javac srcdir="src" destdir="build"/>
    		</target>
    </project>
    et le code pour executer la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Project ant = new Project();
            ProjectHelper helper = new ProjectHelperImpl();
            //ajout d'un écouteur pour voir les événements générés par ANT
            org.apache.tools.ant.DefaultLogger log = new org.apache.tools.ant.DefaultLogger();
     
            log.setErrorPrintStream(System.err);
            log.setOutputPrintStream(System.out);
            log.setMessageOutputLevel(Project.MSG_INFO);
            ant.addBuildListener(log);
            ant.init();
            helper.parse(ant, new File("F:\\Documents\\NetBeansProjects\\HelloMobile\\build.xml"));
            ant.executeTarget("compile");
    Si quelqu'un a une idée ou voit mon erreur...
    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ton JAVA_HOME pointe vers le jre, hors tu as besoin de javac qui est dans le JDK, il te faut changer ton JAVA_HOME vers ton JDK

    A plus

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Par défaut
    J'ai modifié la variable JAVA_HOME vers mon jdk (C:\Program Files\Java\jdk1.6.0_13\bin), mais il me dit toujours cette erreur en m'indiquant cette meme adresse (C:\Program Files\Java\jdk1.6.0_10\jre). Meme en redemarrant le PC, il en tient pas compte !!
    Je ne sais pas comment faire pour modifier ce path...

  8. #8
    Invité
    Invité(e)
    Par défaut
    j'ai déjà vu ce problèmes quelques fois sous Windows. J'ai comme l'impression qu'il y a une clef registre quelque part, mais je n'ai jamais trouvé. Ça arrive souvent quand tu as plusieurs versions installées. Là il faudrait quelqu'un qui utilise Windows pour savoir de quoi ça vient
    Sinon tu peux toujours désinstaller les vieilles version (la 1.6.0_10 dans ton cas)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Par défaut
    Bon, je n'arrive pas encore à résoudre ce probleme, mais je l'ai contourné en me passant de la commande javac, je veux juste créer un jar a partir des classes. Merci bcq George7 pour ton aide.

    Maintenant, je suis donc revenu sur mon servlet, mais par contre j'ai une autre erreur en utilisant l'api ant : il ne trouve pas la classe Locator. J'ai bien mis les deux jars ant.jar et ant-launcher.jar.
    Complete message :
    PWC1406: Servlet.service() for servlet installjar threw exception java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Locator at org.apache.tools.ant.util.FileUtils.fromURI(FileUtils.java:1261) at org.apache.tools.ant.Location.<init>(Location.java:87) at org.apache.tools.ant.Location.<init>(Location.java:70) at org.apache.tools.ant.helper.ProjectHelperImpl$TaskHandler.init(ProjectHelperImpl.java:741) at org.apache.tools.ant.helper.ProjectHelperImpl.handleElement(ProjectHelperImpl.java:615) at org.apache.tools.ant.helper.ProjectHelperImpl.access$600(ProjectHelperImpl.java:52) at org.apache.tools.ant.helper.ProjectHelperImpl$ProjectHandler.startElement(ProjectHelperImpl.java:460) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:491) at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:220) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:872) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242) at org.apache.tools.ant.helper.ProjectHelperImpl.parse(ProjectHelperImpl.java:133) at Instjar.installjar.processRequest(installjar.java:70) at Instjar.installjar.doGet(installjar.java:193) at javax.servlet.http.HttpServlet.service(HttpServlet.java:718) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    voici mon fichier build.xml d'une appli type helloworld :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <project name="HelloMobile" default="jar" basedir=".">
        <description>Builds, tests, and runs the project .</description>
        <!-- <import file="nbproject/build-impl.xml"/> -->
    	<property name="build"    value="${basedir}/build"/>
    	<property name="dist"    value="${basedir}/dist"/>
    	<property name="src"    value="${basedir}/src"/>
     
    	<target name="clean">
    		<delete dir="${dist}/HelloMobile.jar"/>
    	</target>
     
    	<!-- target qui cree le JAR -->
    	<target name="create-jar" depends="clean">
     
    		<!-- creation d un repertoire pour le JAR -->
    		<mkdir dir="${dist}"/>
     
    		<!-- creation du JAR, dans mon exemple son nom sera monProjet.jar -->
    		<jar destfile="${dist}/HelloMobile.jar" basedir="${build}">
    			<manifest>
    				<!-- on indique la classe principale du JAR -->
    				<attribute name="Main-Class" value="hello.Midlet"/>
    			</manifest>
    		</jar>
    	</target>
    Et une partie du code pour executer le fichier build.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    String baseDir = getServletContext().getRealPath("/Projets/HelloMobile/");
            File buildFile = new File( baseDir, "build.xml");
            ProjectHelper helper = new ProjectHelperImpl();
            Project ant = new Project();
            //ajout d'un écouteur pour voir les événements générés par ANT
            org.apache.tools.ant.DefaultLogger log = new org.apache.tools.ant.DefaultLogger();
     
            log.setErrorPrintStream(System.err);
            log.setOutputPrintStream(System.out);
            log.setMessageOutputLevel(Project.MSG_INFO);
            ant.addBuildListener(log);
     
            ant.init();
            ant.setBaseDir( new File( baseDir));
            helper.parse(ant, buildFile);
            ant.executeTarget("create-jar");
    Merci d'avance

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Gaelou Voir le message
    Maintenant, je suis donc revenu sur mon servlet, mais par contre j'ai une autre erreur en utilisant l'api ant : il ne trouve pas la classe Locator. J'ai bien mis les deux jars ant.jar et ant-launcher.jar.
    Tu les as mis où ? bien dans le répertoire lib de WEB-INF ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Par défaut
    Oui, quand je les ajoute à mon projet, ils se mettent dans le repertoire lib dans WEB-INF.
    Je sais pas si ça peut être du au path du build.xml que je donne au helper.parse...
    Je suis un peu perdu, je sais pas comment faire.

Discussions similaires

  1. Pb dans la compilation du code Java
    Par David292929 dans le forum Général Java
    Réponses: 1
    Dernier message: 25/04/2011, 09h24
  2. Réponses: 7
    Dernier message: 18/03/2009, 11h51
  3. Réponses: 3
    Dernier message: 19/02/2009, 11h31
  4. compilé du code java en java
    Par kranagard dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 20/11/2008, 19h59
  5. Compiler du code Java via Java
    Par sozie9372 dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo