jaxb2-annotate-plugin无效

时间:2015-02-27 14:10:03

标签: java jaxb maven-plugin jaxb2-annotate-plugin

我想在生成的“Doc”类之前生成“@ java.lang.SuppressWarnings(”all“)”。

问题: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>

我在Doc类之前尝试了所有三种方法来生成“@ java.lang.SuppressWarnings(”all“)”

2 个答案:

答案 0 :(得分:3)

我认为该插件未激活。您正在使用jaxb2-maven-plugin并使用configuration/plugins/plugin来配置jaxb2-annotate-plugin。问题是,plugins/plugin是我maven-jaxb2-plugin的配置选项,而不是Codehaus jaxb2-maven-plugin

尝试切换到maven-jaxb2-plugin或弄清楚如何在jaxb2-maven-plugin中激活JAXB2插件。

也使用较新版本。您正在尝试使用Java语法,这是一个非常新的开发。请使用jaxb2-annotate-plugin的实际版本(当前为1.0.1)。

以下是参考的测试项目之一:

您的自定义设置看起来不错,三者中的任何一个都可以正常工作。

免责声明:我是jaxb2-annotate-pluginmaven-jaxb2-plugin的作者。

答案 1 :(得分:0)

试试这个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>