如何从ANT执行JAXB编译器

ams*_*ams 16 java ant jaxb jaxb2

我在一个项目上使用JAXB.JAXB的吸引力在于它与JDK捆绑在一起,我一直在命令行上使用xjc.exe从模式生成.java文件.我似乎无法找到JAXB ant任务,确定在http://jaxb.java.net上有一个下载但是我想使用捆绑到JDK中的JAXB是否有某种方法可以从Ant调用JAXB class是否调用了xjc.exe?

ams*_*ams 19

<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>
Run Code Online (Sandbox Code Playgroud)

刚刚在tools.jar中搜索并发现com.sun.tools.internal中的XJCFacade.class测试了上面的代码它运行它产生的输出为xjc.exe似乎XJC.exe调用此代码com.sun.tools .internal.xjc.XJCFacade

我的一个关键要求是ant文件在eclipse中工作,而不必在JDK中包含路径名,因为该文件可以跨操作系统移植.我假设tools.jar通过已安装的JRE首选项选项包含在类路径中.

  • 对于模式文件本身的路径(以及-d属性),请考虑使用<arg path ="..."/>而不是<arg value ="..."/>'path'版本将自动转换路径分隔符,转义shell的特殊字符等.不使用路径,如果路径或文件名是从任何类型的外部数据生成的,则构建文件中可能存在命令注入漏洞. (3认同)

bdo*_*han 13

这是一个有用的链接:

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>
Run Code Online (Sandbox Code Playgroud)