2010-09-02 56 views
14

我在項目上使用JAXB。 JAXB的吸引力在於它與JDK捆綁在一起,我一直在命令行上使用xjc.exe從模式生成.java文件。我似乎無法找到JAXB ant任務,確定有一個下載http://jaxb.java.net但是我想使用捆綁到JDK中的JAXB是否有一些方法可以從ant調用JAXB xjc.exe調用哪個類?如何從ANT執行JAXB編譯器

回答

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> 

剛走到狩獵中的tools.jar,發現XJCFacade.class在com.sun.tools.internal測試了它的工作原理上面的代碼產生輸出爲xjc.exe似乎XJC.exe調用此代碼com.sun.tools.internal.xjc.XJCFacade

我的關鍵要求之一是螞蟻文件在eclipse中工作,無需包含路徑這個文件可以跨操作系統移植到JDK中。我假設tools.jar通過已安裝的JRE首選項選項包含在類路徑中。

+2

對於架構文件本身的路徑(以及對於-d屬性),請考慮使用而不是「路徑」版本將自動轉換路徑分隔符,爲外殼轉義特殊字符等等。如果路徑或文件名是從任何外部數據生成的,那麼如果不使用路徑,在構建文件中可能會出現命令注入漏洞。 – pendor 2012-08-15 14:49:22

12

這裏是一個有用的鏈接:

Java SE 6的不出貨Ant任務(見7.1.3):

從本質上講,他們請執行以下操作:

<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

感謝我們的答覆,我已經熟悉了這個鏈接。問題是這個解決方案需要jaxb-xjc.jar存在於類路徑中,並且ANT任務引用的類不存在於類路徑的任何位置。我不想下載JAXB2 RI,只是使用ANT任務。我正在尋找一種解決方案,不需要從最新的JDK 6以外的網絡下載任何東西,並且與eclipse ant – ams 2010-09-02 20:37:59

+0

很好地合作,謝謝您的更新響應,這非常有用 – ams 2010-09-02 21:14:57