jaxb2-annotate-plugin:向 XJC 类路径添加注释

jaxb2-annotate-plugin: Adding annotations to the XJC classpath

是否可以将自定义注释添加到 XJC class路径,而它们是在我的项目本身中定义的?这在使用 Maven jaxb2-annotate-plugin.

关于这部分文档的问题:

Annotation classes must be known in compile time. I.e. annotation classes must be made available in the XJC classpath. If you want to use your own annotations, you have to pre-compile them and add your annotation classes to the XJC classpath.

当我创建一个单独的项目并将其添加到插件时,它工作正常,如文档示例所示。

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

class 在我的 XSD 生成之前编译,但我仍然得到异常 AnnotationClassNotFoundException。我想避免制作单独的项目 and/or 模块只是为了添加注释。为什么它找不到我的 classes 并且提供注释的唯一方法似乎是外部 projects/modules?

我找到了解决问题的方法。

配置 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>

然而,您的注释需要事先编译。所以要预先编译它,应该添加以下插件 before the 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>

问题是 mvn clean install 的第一次。 如果你还没有编译它怎么办?例如,转到您的 .m2mavel-local-repo 并取消您的项目,然后执行 mvn clean install 并查看它是否失败