【问题标题】:Intellij IDEA doesn't recognized XJC task attributesIntellij IDEA 无法识别 XJC 任务属性
【发布时间】:2011-12-01 13:45:43
【问题描述】:

我有一个带有 XJC 任务定义的 ant build.xml 文件:

<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
  <classpath>
    <fileset dir="jaxb" includes="*.jar" />
  </classpath>
</taskdef>

jaxb dir cotnains jaxb-xjc.jar 里面有 XJCTask 类。

然后我在某个目标中调用 xjc 任务:

<target name="mytarget">
 <xjc target="src" package="com.p1.Person" header="false">
   <schema dir="src/com/p1" includes="Person.xsd"/>
 </xjc>
</target>

Intellij IDEA 无法识别 xjc 调用的结构/模式,并以红色突出显示所有属性(目标、包、标头)和包含元素(模式)。

如果我选择 Ant 选项并将 jaxb-xjc.jar 添加到附加类路径列表,这将无济于事。 我使用捆绑的 Ant 1.8.2

不好的是,当我在 IDEA 中编译它时,我得到了很多相关的错误,但是当我运行构建脚本时,一切正常。我想抑制这些错误。

有什么想法吗?

【问题讨论】:

    标签: ant jaxb intellij-idea xjc taskdef


    【解决方案1】:

    答案来自 IDEA 问题跟踪器中相关错误中的此评论。 http://youtrack.jetbrains.net/issue/IDEA-11248#comment=27-57354

    对于 IDEA 的 XJCTask 问题,只需在 taskdef 中使用 XJC2Task。

    如果您查看 XJC2Task 的源代码,它会公开设置器,以便 IDEA 可以解决它们: http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.bind/jaxb-xjc/2.1.13/com/sun/tools/xjc/XJC2Task.java#XJC2Task.setPackage%28java.lang.String%29

    但是,XJCTask 只是一个动态委托给 JAXB1 或 JAXB2 的类,因此 IDEA 无法解析这些属性,因为您在 taskdef 中定义的类没有设置器。 http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.bind/jaxb-xjc/2.1.13/com/sun/tools/xjc/XJCTask.java#XJCTask.getCoreClassName%28%29

    编辑: 基本上在 JAXB2 中,XJCTask 实际上并不包含任务——它委托给实际任务 XJC2Task。

    这里有一些更好的源链接:

    JAXB 1 中的 XJCTask http://java.net/projects/jaxb/sources/version1/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/XJCTask.java?rev=197

    JAXB2 中的 XJCTask http://java.net/projects/jaxb/sources/version2/content/trunk/jaxb-ri/xjc/facade/com/sun/tools/xjc/XJCTask.java?rev=3863

    JAXB2 中的 XJC2Task http://java.net/projects/jaxb/sources/version2/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/XJC2Task.java?rev=3863

    如果您查看您的 jaxb-xjc-ri-2.x-xx.jar,您会发现它包含一个名为“1/com/sun/tools/xjc/”的包

    如果您在运行 ant 任务并将版本设置为 1.0 时从 JAXB2 中的 XJCTask 调用它。 我希望它能够在当天更轻松地从 v1 过渡到 v2。

    如果您使用的是 v2,则调用 XJC2Task。

    实际上,您不会将其设置为 1.0,因此您可以直接调用 XJC2Task。

    【讨论】:

    • 感谢@Johnny Boy,很棒的分析或经验 :-) 你知道任务之间的主要区别是什么,除了 XJC2 更用户友好吗?
    • 由于 'koders' 已停用,导致一半链接中断。
    • 将链接从 Koders 更改为 GrepCode
    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2022-10-04
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多