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 и посмотрим, не получится ли

Другие вопросы по тегам