Связи JiBX теряются при развертывании зависимости JAR в Eclipse WTP

Я использую Elipse Indigo, maven 2.2.1, m2e 1.0.2, интеграция maven для wtp 0.15.2, разъем m2e для JiBX 1.2.3.

У меня есть общий артефакт maven jar, который содержит привязки jibx. Файл.project для этого выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>my-binding</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
            <buildCommand>
                <name>org.eclipse.wst.common.project.facet.core.builder</name>
            <arguments>
                </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.jibx.eclipse.JibxBindingBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.validation.validationbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
        <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
        <nature>org.jibx.eclipse.JibxNature</nature>
        <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    </natures>
    </projectDescription>

Я следовал инструкциям по установке подключаемого модуля Mae Eclipse. Я использовал плагин build-helper-maven-plugin (с соединителем eclipse), чтобы включить сгенерированные источники в исходную папку.

Когда я компилирую это в eclipse, привязка JiBX работает нормально - я вижу вывод в консоли JiBX и измененные классы в каталоге target / classes.

Затем я использую эту сгенерированную банку в военном артефакте.

Файл проекта:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>my-webapp</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.common.project.facet.core.builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.validation.validationbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
        <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
        <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
        <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
    </natures>
</projectDescription>

Мой сгенерированный org.eclipse.wst.common.component Файл (частично):

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="my-webapp">
        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
        <dependent-module archiveName="my-binding-1.79.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/my-binding/my-binding">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <property name="context-root" value="my-webapp"/>
        <property name="java-output-path" value="/my-webapp/target/classes"/>
    </wb-module>
</project-modules>

Я запускаю wtp с опцией "Обслуживать модули без публикации" и "Никогда не публиковать автоматически". При попытке сослаться на jibx-модифицированные классы в банке, я получаю стандарт java.lang.NoSuchMethodError при ссылке на сгенерированные методы JiBX. Целевой каталог проекта привязки по-прежнему содержит файлы классов, модифицированные в jibx.

Это может быть неправильный путь, но когда я изменяю файл.project артефакта jar, чтобы пропустить добавленные природные ресурсы wtp, похоже, он работает, то есть перестраивает проект my-binding с помощью:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>my-binding</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.jibx.eclipse.JibxBindingBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.validation.validationbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
        <nature>org.jibx.eclipse.JibxNature</nature>
    </natures>
    </projectDescription>

.. перезапустите веб-приложение, и оно работает нормально. Перестройте веб-приложение, и натуры будут добавлены обратно в проект привязки, и он снова сломан.

Мне здесь не хватает уловки (я надеялся, что старый танец wtp-eclipse ушел в прошлое). Есть идеи?

Обновление: после дальнейшей игры я сузил это до сломанных привязок на общих классах

При сборке из командной строки кажется, что все привязки создаются одновременно (или, по крайней мере, не меняют классы в jar-зависимостях), но при сборке через плагин eclipse различные проекты "стирают информацию из более ранние привязки ", в соответствии с разделом Структурированные привязки этого - фабричные классы нарушаются.

Я работаю над тем, чтобы включить привязки общих классов в предварительно скомпилированные включения, но это не маленькая работа - у нас довольно много общих классов, и кто-то обязательно пропустит привязку общего объекта при внесении изменений. Есть ли способ, которым привязки, связанные с каждым проектом, могут быть помечены (названы?), Чтобы несколько классов фабрики могли существовать в общем пакете классов, а не перезаписывать их, т.е.

com.alfonzo.common 
    shared.class
    foobar1_JiBX_bindingFactory.class
    foobar2_jibx_bindingFactory.class

Итак, проект foobar1, привязки сборки, включая разделяемый класс, может ссылаться на его фабрику, а проект foobar2 - на другой.

Или я неправильно понял это?...

0 ответов

Другие вопросы по тегам