jaxb2-annotate-плагин не работает

Я хочу сгенерировать "@java.lang.SuppressWarnings("all")" перед сгенерированным классом "Doc".

Проблема: jaxb2-annotate-plugin не генерирует аннотации.

Мой pom.xml:

...
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <id>xjc</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <extension>true</extension>
                        <arguments>-Xannotate</arguments>
                        <args>
                        <arg>-Xannotate</arg>
                        </args>
                        <plugins>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics-annotate</artifactId>
                            </plugin>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-annotate-plugin-test-annox-annotations</artifactId>
                            </plugin>
                        </plugins>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics-annotate</artifactId>
                    <version>0.6.4</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.codemodel</groupId>
                    <artifactId>codemodel</artifactId>
                    <version>2.6</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-annotate</artifactId>
        <version>0.6.4</version>
    </dependency>
    <dependency>
        <groupId>com.sun.codemodel</groupId>
        <artifactId>codemodel</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb-api.version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>${jaxb.version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-xjc</artifactId>
        <version>${jaxb.version}</version>
    </dependency>
</dependencies>

<properties>
    <jaxb.version>2.2.5-2</jaxb.version>
    <jaxb-api.version>2.1</jaxb-api.version>
</properties>

Мой XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="..."
targetNamespace="..." elementFormDefault="qualified"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:annox="http://annox.dev.java.net"
jaxb:version="2.1" jaxb:extensionBindingPrefixes="annox">
<xs:element name="Doc">
    <xs:complexType>
        <xs:annotation>
            <xs:appinfo>
                <annox:annotate>@java.lang.SuppressWarnings("all")</annox:annotate>
                <annox:annotateClass>@java.lang.SuppressWarnings("all")
                </annox:annotateClass> 
                <annox:annotate target="class">@java.lang.SuppressWarnings("all")
                </annox:annotate>
            </xs:appinfo>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="info" />
        </xs:sequence>
    </xs:complexType> 
</xs:element>

Я попробовал все три способа создания "@java.lang.SuppressWarnings("all")" перед классом Doc.

2 ответа

Решение

Я думаю, что плагин не активирован. Вы используете jaxb2-maven-plugin и использование configuration/plugins/plugin настроить jaxb2-annotate-plugin, Проблема в, plugins/plugin это вариант конфигурации моего maven-jaxb2-plugin, а не Codehaus jaxb2-maven-plugin,

Попробуйте переключиться на maven-jaxb2-plugin или выясните, как плагины JAXB2 активируются в jaxb2-maven-plugin,

Также используйте более новую версию. Вы пытаетесь использовать синтаксис Java, который является довольно недавней разработкой. Пожалуйста, используйте актуальную версию jaxb2-annotate-plugin (текущий 1.0.1).

Вот один из тестовых проектов для справки:

Ваши настройки выглядят хорошо, любой из трех должен работать.

Отказ от ответственности: я автор jaxb2-annotate-plugin а также maven-jaxb2-plugin,

Попробуйте это XSD ..

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="..." xmlns="..."
    elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.0.1"
    xmlns:annox="http://annox.dev.java.net" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
    xmlns:jl="http://annox.dev.java.net/java.lang" jaxb:extensionBindingPrefixes="annox">

    <xs:element name="Doc">
        <xs:complexType>
            <xs:annotation>
                <xs:appinfo>
                    <annox:annotate>
                        <annox:annotate annox:class="java.lang.SuppressWarnings">all</annox:annotate>
                    </annox:annotate>
                </xs:appinfo>
            </xs:annotation>
            <xs:sequence>
                <xs:element ref="info" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Но я предпочитаю внешнее связывание, как это (пример)

<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:annox="http://annox.dev.java.net"
    xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:extensionBindingPrefixes="annox">

    <bindings schemaLocation="../Binding.xsd">

        <bindings node="//xs:complexType[@name='Bindings']">
            <annox:annotate>
                <annox:annotate annox:class="java.lang.SuppressWarnings" >all</annox:annotate>
            </annox:annotate>
        </bindings>

    </bindings>
</bindings>

плагин maven используется (пример)

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.11.0</version>
    <executions>
        <execution>
            <id>commun-generate</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <args>
                    <arg>-Xannotate</arg>
                    <arg>-nv</arg>
                    <arg>-Xnamespace-prefix</arg>
                </args>
                <bindingDirectory>${basedir}/src/main/resources/META-INF/schema/binding</bindingDirectory>
                <bindingIncludes>
                    <bindingInclude>global-binding.xjb</bindingInclude>
                    <bindingInclude>Binding.xjb</bindingInclude>
                </bindingIncludes>
                <generateDirectory>${basedir}/src/main/java/</generateDirectory>
                <schemas>
                    <schema>
                        <fileset>
                            <directory>${basedir}/src/main/resources/META-INF/schema</directory>
                            <includes>
                                <include>Binding.xsd</include>
                            </includes>
                        </fileset>
                    </schema>
                </schemas>
                <strict>false</strict>
                <extension>true</extension>
                <verbose>true</verbose>
                <forceRegenerate>true</forceRegenerate>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                        <version>0.6.0</version>
                    </plugin>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-annotate</artifactId>
                        <version>0.6.0</version>
                    </plugin>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-namespace-prefix</artifactId>
                        <version>1.1</version>
                    </plugin>
                </plugins>
            </configuration>
        </execution>
    </executions>
</plugin>
Другие вопросы по тегам