3

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 ファイルをこのリンクにアップロードしました。目的のスキーマを含むプロジェクトの zip ファイルです。問題を再現するには、コマンド ラインで解凍したプロジェクトのルート ディレクトリに移動しmvn clean install、エラーを再現するように入力するだけです。

このエラーを解決するにはどうすればよいですか?


編集:

pom.xml のプラグイン構成に以下を追加して実験しましたが、これまでのところ成功していません。

<args>
    <arg>-Xannotate</arg>
</args>  

2番目の編集:

@lexicore の提案を に追加しましたpom.xmlが、結果は であり、このリンクをクリックしてnull pointer exception読むことができます。他の人がより簡単に使用できるようにするために、このリンクに完全な電流を含めています。この改訂版と上記の zip ファイルを合わせれば、数分で問題を再現できます。これは設定の問題ですか、それともバグですか?hyperjaxbpom.xml pom.xml

4

3 に答える 3

3

ここで、新規ユーザーの関心のために、この特定の質問に答えます。

報告されたエラーが表示される場合:

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-pluginmaven-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

于 2014-10-17T19:43:47.493 に答える
1

前の質問でXstian の回答に追加しなければならなかった次の警告を考慮してください。

警告

この回避策は、Hyperjaxb をまったく使用しません。この回避策では、 を使用しjaxb2-annotate-pluginて JPA アノテーションを追加します。これは、Hyperjaxb によって通常実行されるタスクです。

つまり、この回避策を使用することを選択した場合、Hyperjaxb トラックから完全に離れることになります。jaxb2-annotate-pluginHyperjaxb を使用する場合は必要ありません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

于 2014-10-17T19:36:33.700 に答える