Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从ANT执行JAXB编译器_Ant_Jaxb_Java_Jaxb2 - Fatal编程技术网

如何从ANT执行JAXB编译器

如何从ANT执行JAXB编译器,ant,jaxb,java,jaxb2,Ant,Jaxb,Java,Jaxb2,我正在一个项目中使用JAXB。JAXB的吸引力在于它与JDK捆绑在一起,我曾在命令行上使用xjc.exe从模式生成.java文件。我似乎找不到JAXB ant任务,当然有一个下载,但是我想使用捆绑到JDK中的JAXB。有没有办法从ant调用JAXB?xjc.exe调用什么类?这里有一个有用的链接: JavaSE6不提供Ant任务(见7.1.3): 基本上,他们做了以下工作: <target name="xjc" description="...."> <ex

我正在一个项目中使用JAXB。JAXB的吸引力在于它与JDK捆绑在一起,我曾在命令行上使用xjc.exe从模式生成.java文件。我似乎找不到JAXB ant任务,当然有一个下载,但是我想使用捆绑到JDK中的JAXB。有没有办法从ant调用JAXB?xjc.exe调用什么类?

这里有一个有用的链接:

JavaSE6不提供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>


刚刚在tools.jar中搜索,发现com.sun.tools.internal中的XJCFacade.class测试了上面的代码,它可以工作,它生成的输出是xjc.exe,似乎xjc.exe调用了这个代码com.sun.tools.internal.xjc.XJCFacade


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

在JAXB2基础中找不到几个示例Ant/JAXB项目:


感谢我们的回复,我已经熟悉了这个链接。问题在于,此解决方案要求类路径上存在jaxb-xjc.jar,并且ANT任务引用的类在类路径上的任何位置都不存在。我不想下载JAXB2 RI,只想使用ANT任务。我正在寻找一种解决方案,它不需要从最新的JDK 6以外的网络下载任何东西,而且它与Eclipse ANToT很好地工作在架构文件本身的路径上(也适用于-D属性),考虑使用代替“路径”版本将自动转换路径分隔符,转义shell的特殊字符等。如果不使用路径,则如果路径或文件名是从任何类型的外部数据生成的,则生成文件中可能存在命令注入漏洞。
<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>