答案来自 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。