【问题标题】:How to execute the JAXB compiler from ANT如何从 ANT 执行 JAXB 编译器
【发布时间】:2010-09-02 19:24:35
【问题描述】:

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

【问题讨论】:

    标签: ant jaxb java jaxb2


    【解决方案1】:
    <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 中寻找并在 com.sun.tools.internal 中找到了 XJCFacade.class 测试了上面的代码它可以工作它产生输出为 xjc.exe 似乎 XJC.exe 将此代码称为 com。 sun.tools.internal.xjc.XJCFacade

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

    【讨论】:

    • 对于模式文件本身的路径(以及 -d 属性),请考虑使用 而不是 'path' 版本会自动转换路径分隔符、转义 shell 的特殊字符等。如果不使用路径,如果路径或文件名是从任何类型的外部数据。
    【解决方案2】:

    这是一个有用的链接:

    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>
    

    【讨论】:

    • 感谢我们的回复,我已经熟悉这个链接了。问题是该解决方案要求 jaxb-xjc.jar 存在于类路径中,并且为 ANT 任务引用的类在类路径中的任何位置都不存在。我不想下载 JAXB2 RI 而只是为了使用 ANT 任务。我正在寻找一种解决方案,除了最新的 JDK 6 之外,不需要从网上下载任何东西,并且可以很好地与 eclipse ant 配合使用
    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2012-11-21
    • 1970-01-01
    • 2012-07-07
    相关资源
    最近更新 更多