Как использовать jaxb2-annotate-plugin с XJC в командной строке
Я строю Java-классы на основе XSD с использованием "Jaxb-RI" в командной строке (xjc.bat). Я хочу установить пространство имен в аннотации XmlType, используя jaxb2-annotate_plugin, но я не знаю, как добавить этот плагин в xjc classpath и активировать его.
вот мой внешний файл bindings.xjb:
<jxb:bindings xmlns:jxb="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"
jxb:extensionBindingPrefixes="xjc annox"
version="2.1">
<jxb:bindings schemaLocation="myschema.xsd" node="/xs:schema">
<jxb:bindings node="xs:complexType[@name='MyType]">
<annox:annotateClass>@javax.xml.bind.annotation.XmlType(namespace="urn:myschematwo")</annox:annotateClass>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Моя командная строка:
D:/jaxb-ri/bin/xjc.bat -p "com.jaxb.mypackage" -d
"D:/myproject/src/main/java" D:/myschema.xsd -b "D:/bindings.xjb"
-extension
Когда я выполняю эту команду, у меня появляется сообщение об ошибке, в котором говорится, что " http://annox.dev.java.net/" не поддерживается.
Заранее спасибо.
1 ответ
Отказ от ответственности: я автор jaxb2-annotate-plugin.
Во-первых, я не предоставляю пример для командной строки, поскольку (насколько я знаю) никто не использует командную строку или пакетные сценарии для компиляции схемы. По крайней мере, на сегодняшний день не было никаких запросов на это. Есть примеры для Ant и Maven, один для Ant - это закрытие использования командной строки.
Далее мне интересно, что в xjc.bat
,
Если это вызывает xjc.exe
из распространения Java, скорее всего, это вообще не будет работать со сторонними плагинами, а не только с jaxb2-annotate-plugin
, Причина в том, что версия XJC, которая распространяется с Java, имеет переименованный пакет: com.sun.tools.**
-> com.sun.tools.internal.**
, Это нарушает, естественно, совместимость с плагинами. Поэтому, пожалуйста, убедитесь, что xjc.bat
не вызывает xjc.exe
содержится в дистрибутиве Java.
я надеюсь xjc.bat
звонки com.sun.tools.xjc.XJCFacade
от JAXB RI Jars.
Для запуска плагина вам понадобятся две вещи:
- Включите все необходимые зависимости в classpath.
- Включите плагин с помощью
-Xannotate
параметр командной строки.
Эти зависимости:
<!-- JAXB2 Basics library -->
<include name="jaxb2-basics-*.jar"/>
<include name="jaxb2-basics-annotate*.jar"/>
<!-- JAXB2 Basics library dependencies -->
<include name="annox-*.jar"/>
<include name="javaparser-*.jar"/>
<include name="commons-beanutils-*.jar"/>
<include name="commons-logging-*.jar"/>
<include name="commons-lang3-*.jar"/>
Вот полное дерево зависимостей (с версиями):
[INFO] org.jvnet.jaxb2_commons:jaxb2-basics-annotate:jar:1.0.3-SNAPSHOT
[INFO] +- org.jvnet.jaxb2_commons:jaxb2-basics-tools:jar:0.8.1:compile
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.7.0:compile
[INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- com.sun.xml.bind:jaxb-impl:jar:2.2.7:provided
[INFO] | +- com.sun.xml.bind:jaxb-core:jar:2.2.7:provided
[INFO] | | +- javax.xml.bind:jaxb-api:jar:2.2.11:provided
[INFO] | | \- com.sun.istack:istack-commons-runtime:jar:2.16:provided
[INFO] | \- com.sun.xml.fastinfoset:FastInfoset:jar:1.2.12:provided
[INFO] | \- javax.xml.bind:jsr173_api:jar:1.0:provided
[INFO] +- com.sun.xml.bind:jaxb-xjc:jar:2.2.7:provided
[INFO] +- org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-testing:jar:0.9.0:test
[INFO] | \- org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:jar:0.9.0:test
[INFO] | +- org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-core:jar:0.9.0:test
[INFO] | | +- com.sun.org.apache.xml.internal:resolver:jar:20050927:test
[INFO] | | +- org.apache.maven:maven-plugin-api:jar:2.0.9:test
[INFO] | | +- org.sonatype.plexus:plexus-build-api:jar:0.0.7:test
[INFO] | | \- org.apache.maven:maven-project:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-settings:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-profile:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-model:jar:2.0.9:test
[INFO] | | +- org.apache.maven:maven-artifact-manager:jar:2.0.9:test
[INFO] | | | +- org.apache.maven:maven-repository-metadata:jar:2.0.9:test
[INFO] | | | \- org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-2:test
[INFO] | | +- org.apache.maven:maven-plugin-registry:jar:2.0.9:test
[INFO] | | \- org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:test
[INFO] | | \- classworlds:classworlds:jar:1.1-alpha-2:test
[INFO] | +- org.codehaus.plexus:plexus-utils:jar:1.5.15:test
[INFO] | +- org.jvnet.jaxb2.maven2:maven-jaxb22-plugin:jar:0.9.0:test
[INFO] | \- org.apache.maven.plugin-tools:maven-plugin-annotations:jar:3.2:test
[INFO] | \- org.apache.maven:maven-artifact:jar:3.0:test
[INFO] +- org.jvnet.annox:annox:jar:1.0.1:compile
[INFO] | +- org.apache.commons:commons-lang3:jar:3.2.1:compile
[INFO] | +- commons-io:commons-io:jar:1.2:compile
[INFO] | \- com.google.code.javaparser:javaparser:jar:1.0.11:compile
[INFO] \- junit:junit:jar:4.11:test
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test
Материал Maven не связан, иначе вы сможете увидеть версии.
Надеюсь это поможет.
Честно говоря, я немного неохотно вкладываю время в выборку из командной строки / командной строки. Но если вы получите один рабочий, я бы добавил его в образцы.
Зачем вам это нужно в командной строке?