Intellij IDEA не распознает атрибуты задачи XJC - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть файл ant build.xml с определением задачи XJC:

<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, я получаю много связанных ошибок, но когда я запускаю скрипт сборки, все работает нормально. Я хочу подавить эти ошибки.

Есть идеи?

1 Ответ

3 голосов
/ 14 января 2012

Ответ приходит из этого комментария в связанной ошибке в системе отслеживания проблем IDEA. http://youtrack.jetbrains.net/issue/IDEA-11248#comment=27-57354

Для проблем XJCTask с IDEA, просто используйте 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

Edit: По сути, в JAXB2 XJCTask на самом деле не содержит задачу - он делегирует фактическую задачу XJC2Task.

Вот несколько лучших ссылок на источник:

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

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

XJC2 Задание в JAXB2 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 /"

Это то, что вызывается из XJCTask в JAXB2, если вы запускаете задачу ant с установкой версии 1.0. Я ожидаю, что он был вставлен, чтобы позволить более легкие переходы к v2 от v1 назад в тот же день.

XJC2Task - это то, что вызывается, если вы используете v2.

Реально вы не собираетесь устанавливать его на 1.0, поэтому вы можете просто вызвать XJC2Task напрямую.

...