2011-05-10 8 views
1

J'essaie de compiler des fichiers Java à partir d'un programme Java en utilisant org.apache.tools.ant.taskdefs.Javac et d'imprimer sa sortie à l'écran.Sortie de compilation Ant Javac

Voir l'extrait de code ci-dessous pour votre référence,

Javac javaCompile = (Javac) webServiceProject.createTask("javac"); 
javaCompile.setSrcdir("D:\\Java\\src"); 
javaCompile.setDestdir("D:\\Java\\classes"); 
try{ 
    javaCompile.execute(); 
}catch (BuildException buildException){ 
    FacesMessage message = new FacesMessage(buildException.getMessage()); 
    message.setSeverity(FacesMessage.SEVERITY_FATAL); 
    FacesContext.getCurrentInstance().addMessage(null, message); 
} 

Lorsque je compile les fichiers avec le code ci-dessus et si une erreur de compilation existe, je reçois un message "Compile failed; see the compiler error output for details.".

Je ne sais pas comment récupérer l'erreur de compilation et l'afficher en tant que sortie à l'écran. Quelqu'un peut-il suggérer comment le récupérer?

+6

Vous compilez des classes Java à partir de votre application JSF? Ne faites pas ça :-) Sérieusement, si vous faites une telle chose monstrueuse, vous devriez découpler vos couches. L'utilisation d'un compilateur n'appartient pas aux problèmes qu'une application JSF devrait connaître. –

Répondre

0

Le code ci-dessous a fait l'affaire et cela m'a récupéré l'erreur du compilateur.

Javac javaCompile = (Javac) webServiceProject.createTask("javac"); 
javaCompile.createCompilerArg().setValue("-Xstdout"); 
String filePath = basePath + "resources" + File.separator 
     + "errorlog.log"; 
javaCompile.createCompilerArg().setFile(new File(filePath)); 
javaCompile.setNowarn(true); 
0

Ignorant la question de savoir si vous devez compilerons code dans une application JSF ...

Je crois que Ant envoie la sortie de la compilation à l'enregistreur. Donc, pour l'obtenir, vous devrez configurer l'enregistreur pour envoyer les événements de journal pertinents à un fichier ... ou quelque chose.

0

Essayez de modifier le paramètre build.compiler. Ant avait du mal à trouver le compilateur que j'avais spécifié, "org.eclipse.jdt.core.JDTCompilerAdapter" - le changer en "moderne" m'a permis de compiler.

C'était difficile à traquer. Je ne suis pas sûr pourquoi il n'y avait pas de sortie.