Intellij IDEA 无法识别 XJC 任务属性

2024-03-24

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

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

jaxb 目录包含 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 中编译它时,我收到很多相关错误,但是当我运行构建脚本时,一切正常。我想抑制这些错误。

有任何想法吗?


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

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

如果你查看 XJC2Task 的源代码,它公开了 setter,以便 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 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 中定义的类没有 setter。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 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 中的 XJCTaskhttp://java.net/projects/jaxb/sources/version1/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/XJCTask.java?rev=197 http://java.net/projects/jaxb/sources/version1/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/XJCTask.java?rev=197

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

JAXB2 中的 XJC2Taskhttp://java.net/projects/jaxb/sources/version2/content/trunk/jaxb-ri/xjc/src/com/sun/tools/xjc/XJC2Task.java?rev=3863 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Intellij IDEA 无法识别 XJC 任务属性 的相关文章

随机推荐