2010-09-02 3 views
14

J'utilise JAXB sur un projet. l'attrait de JAXB est qu'il est livré avec le JDK, j'ai été d'utiliser xjc.exe sur la ligne de commande pour générer les fichiers .java à partir d'un schéma. Je n'arrive pas à trouver la tâche Ant JAXB, bien qu'il y ait un téléchargement à http://jaxb.java.net Cependant, je veux utiliser le JAXB qui est inclus dans le JDK est-il un moyen d'appeler JAXB à partir de quelle classe l'appel xjc.exe ?Comment exécuter le compilateur JAXB à partir de ANT

Répondre

18
<target name="generate-jaxb-code"> 
    <java classname="com.sun.tools.internal.xjc.XJCFacade"> 
      <arg value="-p" /> 
      <arg value="com.example"/> 
      <arg value="xsd/sample.xsd" /> 
    </java> 
</target> 

Nous sommes allés à la chasse dans la tools.jar et a trouvé le XJCFacade.class dans com.sun.tools.internal le code ci-dessus ont testé cela fonctionne, il produit la sortie en tant que xjc.exe Il semble que XJC.exe appelle ce code com.sun.tools.internal.xjc.XJCFacade

L'une de mes exigences clés était que le fichier ant avait du travail dans eclipse sans avoir à inclure un chemin nommer le JDK de cette façon le fichier serait portable sur les systèmes d'exploitation. Je suppose que tools.jar est inclus dans le classpath via les options de préférences JRE installées.

+2

Pour le chemin vers le fichier de schéma lui-même (ainsi que pour l'attribut -d), pensez à utiliser au lieu de La version 'path' convertira automatiquement les séparateurs de chemins, évite les caractères spéciaux pour le shell , etc. Sans utiliser de chemin, il y a une chance d'une vulnérabilité d'injection de commande dans votre fichier de construction si le chemin ou le nom de fichier est généré à partir de n'importe quel type de données externes. – pendor

12

Voici un lien utile:

Java SE 6 ne livre pas la tâche Ant (voir 7.1.3):

Essentiellement, ils les stratégies suivantes:

<target name="xjc" description="...."> 
    <exec executable="${jdk.dir}/bin/xjc.exe"> 
     <arg value="-d"/> 
     <arg value="${src.dir}"/> 
     <arg value="-p"/> 
     <arg value="com.mydomain.jaxb"/> 
     <arg value="${etc.dir}/myschema.xsd"/> 
    </exec> 
</target> 
+0

Merci pour notre réponse, je connaissais déjà ce lien. Le problème est que cette solution nécessite que jaxb-xjc.jar soit présent sur le chemin de classe et que la classe référencée pour la tâche ANT n'existe nulle part sur le chemin de classe. Je ne veux pas avoir à télécharger le JAXB2 RI et juste pour utiliser la tâche ANT. Je suis à la recherche d'une solution qui ne nécessite pas de télécharger quoi que ce soit sur le net autre que le dernier JDK 6 et qui fonctionne bien avec eclipse ant – ams

+0

merci pour votre réponse à jour il était très utile – ams

Questions connexes