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 回答
0

问题是第一次mvn clean install。如果你还没有编译呢?例如,去你的.m2mavel-local-repo取消你的项目,然后mvn clean install看看它是否失败

于 2018-02-01T17:58:34.967 回答