2

プロジェクト内で定義されているカスタム アノテーションを XJC クラスパスに追加することはできますか? これは、maven jaxb2-annotate-pluginを使用する場合です。

問題は、ドキュメントのこの部分に関するものです。

注釈クラスは、コンパイル時に認識されている必要があります。つまり、注釈クラスは XJC クラスパスで使用可能にする必要があります。独自のアノテーションを使用する場合は、アノテーションを事前にコンパイルして、アノテーション クラスを XJC クラスパスに追加する必要があります。

別のプロジェクトを作成してプラグインに追加すると、ドキュメントの例に示すように正常に動作します。

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.12.3</version>
    <executions>
        <execution>
            <id>generate</id>
            <phase>process-resources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <args>
                    <arg>-Xannotate</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-annotate</artifactId>
                        <version>1.0.2</version>
                    </plugin>
                    <plugin>
                        <groupId>com.acme</groupId>
                        <artifactId>external-project</artifactId>
                        <version>1.0.0</version>
                    </plugin>
                </plugins>
            </configuration>
        </execution>
    </executions>
</plugin>

しかし、同じプロジェクトにある注釈を使用したいと思います。拾ってもらうにはどうしたらいいですか?の前の段階でコンパイルするprocess-resourcesと、次のようになります。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <executions>
        <execution>
            <id>compile</id>
            <phase>process-resources</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>  
    </executions>
</plugin>

クラスは XSD からの生成前にコンパイルされますが、それでも例外が発生しますAnnotationClassNotFoundException。注釈を追加するためだけに別のプロジェクトやモジュールを作成することは避けたいと思います。クラスが見つからず、注釈を提供する唯一の方法が外部プロジェクト/モジュールのように見えるのはなぜですか?

4

2 に答える 2

3

私は自分の問題の解決策を見つけました。

プラグインを構成するときに、maven-jaxb2-pluginそのプラグインの依存関係を提供することができます。自分のプロジェクトを依存関係として提供すると、そのプロジェクトのクラスを見つけることができます。したがって、次のようになります。

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.12.1</version>
    <executions>
        <execution>
            <id>generate</id>
            <phase>process-resources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <args>
                    <arg>-Xannotate</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-annotate</artifactId>
                        <version>1.0.2</version>
                    </plugin>
                </plugins>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>current-project</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</plugin>

ただし、注釈を事前にコンパイルする必要があります。したがって、事前にコンパイルするには、次のプラグインmaven-jaxb2-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <executions>
        <execution>
            <phase>process-resources</phase>
            <id>compile</id>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>
于 2016-03-09T13:53:14.017 に答える