JAXB2 Основы Плагин слияния: Настройка пользовательской стратегии слияния
Я успешно активировал плагин 'Mergeable' Основы JAXB2 в сценарии ant следующим образом:
<target name="generate-sources" depends="clean">
<xjc destdir="${generated.src.dir}" package="${jaxb.package}" extension="true">
<arg line="
-Xmergeable
-Xinheritance"/>
<binding dir="${altova}">
<include name="**/*.xjb"/>
</binding>
<schema dir="${altova}">
<include name="**/*.xsd"/>
</schema>
<!-- Plugins -->
<classpath>
<fileset dir="${xjc.lib}">
<!-- JAXB2 Basics library -->
<include name="jaxb2-basics-*.jar"/>
<!-- JAXB2 Basics library dependencies -->
<include name="jaxb2-basics-tools-*.jar"/>
<include name="commons-beanutils-*.jar"/>
<include name="commons-lang-*.jar"/>
<include name="commons-logging-*.jar"/>
</fileset>
<fileset dir="${webapp.lib}">
<include name="jaxb2-basics-runtime-*.jar"/>
</fileset>
<!-- Contains custom strategy classes -->
<pathelement location="${webapp.classes}"/>
</classpath>
</xjc>
Он работает и правильно добавляет интерфейс 'MergeFrom' в мои сгенерированные классы.
Моя проблема заключается в том, что всякий раз, когда я пытаюсь указать собственную стратегию слияния, используя аргумент 'mergeStrategyClass', интерфейс 'MergeFrom' полностью исчезает из сгенерированного класса. Синтаксис, который я использую, выглядит следующим образом:
<arg line="
-Xmergeable-mergeStrategyClass=com.acme.foo.CustomMergeStrategy
-Xinheritance"/>
Это взято прямо из примера на веб-сайте JAXB2 Basics. (Кажется, что с classpath все в порядке, так как, когда я намеренно пропускаю класс, я получаю исключение ClassNotFoundException)
При сборке муравья не возникает никаких ошибок, и классы генерируются успешно, за исключением отсутствующего интерфейса.
1 ответ
Вам нужно иметь 2 аргумента. Один для активации подключаемого плагина и один для указания пользовательского класса стратегии слияния.
-Xmergeable
-Xmergeable-mergeStrategyClass = com.acme.foo.CustomMergeStrategy