jaxb2-annotate-plugin: Добавление аннотаций в путь к классам XJC
Можно ли добавить пользовательские аннотации в путь к классам 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 ответа
Я нашел решение своей проблемы.
При настройке 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>
Проблема с этим в первый раз mvn clean install
, Что если вы еще не скомпилировали его? Например, перейти к вашему .m2
или же mavel-local-repo
и отмените свой проект, а затем сделайте mvn clean install
и посмотрим, не получится ли