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>