Для настройки "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 вопросы, подобные вашим.

Другие вопросы по тегам