Для настройки "http://annox.dev.java.net" требуется ключ "-Xannotate"
Я пытаюсь запустить реальную схему через hyperjaxb. Я неоднократно проверял схему, используя jaxb, и jaxb каждый раз корректно импортирует схему. Однако, когда я пытаюсь заставить hyperjaxb генерировать аннотированные hibernate java-классы из той же схемы, я получаю следующую ошибку:
[ERROR] Error while parsing schema(s).Location [ file:/C:/path/to/src/main/resources/schema.xsd{4,32}].
org.xml.sax.SAXParseException; systemId: file:/C:/path/to/src/main/resources/schema.xsd;
lineNumber: 4; columnNumber: 32;
Using "http://annox.dev.java.net" customizations requires the "-Xannotate" switch
to enable this plug-in.
Я погуглил это сообщение об ошибке и прочитал другие сообщения об этом, но не нашел чистых инструкций для его устранения. Самая близкая, которую я нашел, является этой статьей, в которой говорится, что плагин annox is activated by the -Xannotate command-line argument
,
Я прочитал эту ссылку, но добавление следующего в файл xsd не устранило ошибку, возможно потому, что xsd
не использует jaxb
префикс где угодно.
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1"
xmlns:annox="http://annox.dev.java.net"
jaxb:extensionBindingPrefixes="annox"
Я загрузил почтовый файл, содержащий все соответствующие материалы, чтобы быстро воспроизвести проблему по этой ссылке. Это zip-файл проекта, включая предполагаемую схему. Все, что вам нужно сделать, чтобы воспроизвести проблему, это перейти из командной строки в корневой каталог разархивированного проекта и набрать mvn clean install
воспроизвести ошибку.
Как я могу устранить эту ошибку?
РЕДАКТИРОВАТЬ:
Я экспериментировал с добавлением следующего в конфигурацию плагина в pom.xml, но пока не добился успеха.
<args>
<arg>-Xannotate</arg>
</args>
ВТОРОЙ РЕДАКТИРОВАТЬ:
Я добавил предложения @lexicore в pom.xml
, но результат null pointer exception
, которую вы можете прочитать , перейдя по этой ссылке. Содействовать более легкому использованию hyperjaxb
другими, я включаю полный ток pom.xml
по этой ссылке. Вместе это пересмотрено pom.xml
и вышеупомянутого файла почтового индекса достаточно, чтобы воссоздать проблему через несколько минут. Это проблема конфигурации или ошибка?
3 ответа
Вы должны удалить этот плагин <artifactId>maven-hyperjaxb3-plugin</artifactId>
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.6.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<roundtripTestClassName>RoundtripTest</roundtripTestClassName>
</configuration>
</plugin>
Теперь я отвечу на этот конкретный вопрос для интереса новых пользователей.
Если вы видите сообщение об ошибке:
Using "http://annox.dev.java.net" customizations requires the "-Xannotate"
switch to enable this plug-in.
Это означает, что вы должны включить переключатель "-Xannotate", чтобы включить этот плагин. Пожалуйста, обратитесь к документации на первой странице jaxb2-annotate-plugin
:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<extension>true</extension>
<args>
<arg>-Xannotate</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
</plugin>
<!-- Add the dependencies with your annotations as 'plugins' below -->
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-annotate-plugin-test-annox-annotations</artifactId>
</plugin>
</plugins>
</configuration>
</plugin>
Увидеть -Xannotate
выключатель? Это оно.
jaxb2-annotate-plugin
можно использовать с maven-hyperjaxb3-plugin
так же. Вот пример из тестов Hyperjaxb:
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<configuration>
<postArgs>
<arg>-Xannotate</arg>
</postArgs>
</configuration>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search</artifactId>
<version>3.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
</dependencies>
</plugin>
(Вам не нужно включать jaxb2-annotate-plugin
как это уже включено maven-hyperjaxb3-plugin
автоматически.)
Примите во внимание это предупреждение, которое я должен был добавить к ответу Xstian в предыдущем вопросе:
Предупреждение
Этот обходной путь не использует Hyperjaxb вообще. Этот обходной путь использует
jaxb2-annotate-plugin
добавить аннотации JPA. Это задача, которая обычно выполняется Hyperjaxb.То есть, если вы решите использовать этот обходной путь, вы полностью покинете трек Hyperjaxb. Твой не нужен
jaxb2-annotate-plugin
если вы используете Hyperjaxb и наоборот, вам не нужен Hyperjaxb, если вы добавляете свои аннотации, используяjaxb2-annotate-plugin
,Остерегайтесь, однако, что
jaxb2-annotate-plugin
выполняет очень поверхностную задачу добавления аннотаций, которые вы явно настраиваете в своих файлах привязки. Hyperjaxb, с другой стороны, выполняет очень глубокий и тщательный анализ вашей модели схемы и автоматически генерирует разумные аннотации JPA. В некоторых случаях Hyperjaxb даже должен дополнить сгенерированный код JAXB, чтобы сделать его совместимым с JPA. Это функции, которые выходят за рамкиjaxb2-annotate-plugin
,
Поэтому, если задача состоит в том, чтобы генерировать аннотации JPA в классах, производных от схемы, вы используете EITHER Hyperjaxb OR jaxb2-annotate-plugin
, Это совершенно неверный путь, чтобы делать оба в одно и то же время.
Я пометил этот конкретный вопрос, чтобы annox
как это правильный тег. Annox - библиотека позади jaxb2-annotate-plugin
и annox
тег обычно ассоциируется с jaxb2-annotate-plugin
вопросы, подобные вашим.