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

时间:2016-03-09 10:50:22

标签: jaxb classpath xjc maven-jaxb2-plugin jaxb2-annotate-plugin

是否可以在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。我想避免为了添加注释而制作单独的项目和/或模块。为什么它找不到我的类,提供注释的唯一方法似乎是外部项目/模块?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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