我有一个带有XJC任务定义的ant build.xml文件:
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath>
<fileset dir="jaxb" includes="*.jar" />
</classpath>
</taskdef>
jaxb dir包含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问题跟踪器中一个相关bug的评论。http://youtrack.jetbrains.net/issue/idea - 11248 #评论= 27 - 57354
对于IDEA的XJCTask问题,只需在任务定义中使用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 % 28以% 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中的XJCTaskhttp://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
JAXB2中的XJC2Taskhttp://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。
XJC2Task是在使用v2时调用的。
实际上,您不打算将其设置为1.0,因此您可以直接调用XJC2Task。