是否可以在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
。我想避免为了添加注释而制作单独的项目和/或模块。为什么它找不到我的类,提供注释的唯一方法似乎是外部项目/模块?
答案 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
。
怎么样你还没有编译呢?例如,转到您的.m2
或mavel-local-repo
并取消您的项目,然后执行mvn clean install
并查看是否失败