OSGi maven-bundle-plugin не включает мой пакет

У меня есть приложение веб-службы CXF в Fuse, и у него есть ссылка в XML-файле контекста верблюда на банку, содержащую мои файлы, сгенерированные из WSDL.

<cxf:cxfEndpoint id="LookupEndpoint"
                 address="${my.LookupUri}"
                 serviceClass="com.whatever.IWebService"
                 wsdlURL="wsdl/MyWsdl.wsdl"/>  

com.whatever.* есть в моем списке <Import-Package>. Банка находится в моих зависимостях maven. Я могу сказать import com.whatever.IWebService; и он не жалуется.

Но maven-bundle-plugin не включает этот пакет в MANIFEST.MF.

Он включает в себя все другие мои пакеты, которые я просил. Но не этот. Итак, в Fuse, когда я его развертываю, я получаю ClassNotFoundException, ссылаясь на загрузку класса context.xml.

Это очень расстраивает. Есть ли способ заставить плагин импортировать определенный пакет? Потому что их автоматический решатель зависимостей игнорирует мой <Import-Package>

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>${version.maven-bundle-plugin}</version>
            <extensions>true</extensions>

            <configuration>
                <manifestLocation>src/main/resources/META-INF</manifestLocation>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>

                     <Import-Package> 
                     *, 
                     com.imports.this.one.fine*,
                     com.imports.this.one.just.fine*,
                     com.imports.does.not.import.this.one.*,
                    </Import-Package> 

                    <Export-Package>
                    com.something.export.*
                    </Export-Package>

                </instructions>
            </configuration>
        </plugin>

person djb    schedule 25.08.2016    source источник


Ответы (1)


Когда вы используете <Import-Package> с подстановочным знаком, заголовок OSGi Import-Package создается для всех пакетов, соответствующих подстановочному знаку, от которого зависит код в вашем пакете.

Если maven-bundle-plugin не создает импорт для ожидаемого пакета, это означает, что код в вашем пакете на самом деле не ссылается на этот пакет.

Вместо того, чтобы импортировать этот пакет, разве он не должен быть включен в комплект?? Почему вы хотите импортировать его?

person Neil Bartlett    schedule 25.08.2016
comment
Привет, Нил, идея заключалась в том, чтобы хранить WSDL и их сгенерированные классы в баночках пакетов. Но они просто как общие библиотеки. Затем у нас есть службы, которые предоставляют конечные точки, используя классы в общих библиотеках. (Работает.) Но только если пакеты есть в MANIFEST.MF. Сейчас я проверю, исправляет ли это случайное создание экземпляра класса обслуживания в коде... - person djb; 25.08.2016
comment
Вот оно. ObjectFactory of = new ObjectFactory(); ***** сын OSGi. Спасибо чувак - person djb; 25.08.2016
comment
Не уверен, что я рад тому, что ты называешь OSGi сукиным сыном! Во-первых, проблема была вовсе не в OSGi, а в одном из инструментов сборки, maven-bundle-plugin. Во-вторых, то, что он делает, задокументировано и очень разумно. - person Neil Bartlett; 26.08.2016
comment
@NeilBartlett Я думаю, что ОП жаловался на свою проблему, а затем молился OSGi о ее существовании :-) - person erdal.karaca; 26.08.2016