Apache Felix 6.0.1: BundleException при инициализации - PullRequest
0 голосов
/ 12 ноября 2018

В Apache Felix 6.0.1 я получаю следующую ошибку при инициализации платформы OSGi:

ERROR: Error parsing system bundle statement.
org.osgi.framework.BundleException: Exported package names cannot be zero length.
at org.apache.felix.framework.util.manifestparser.ManifestParser.normalizeExportClauses(ManifestParser.java:865)
at org.apache.felix.framework.util.manifestparser.ManifestParser.<init>(ManifestParser.java:217)
at org.apache.felix.framework.ExtensionManager$ExtensionManagerRevision.update(ExtensionManager.java:977)
at org.apache.felix.framework.ExtensionManager$ExtensionManagerRevision.access$000(ExtensionManager.java:885)
at org.apache.felix.framework.ExtensionManager.updateRevision(ExtensionManager.java:378)
at org.apache.felix.framework.Felix.init(Felix.java:744)
at org.apache.felix.framework.Felix.init(Felix.java:637)

Я не получил эту ошибку с Apache Felix 5.x

И я не смог найти ни одного JAR-файла с пустым объявлением имен пакетов, кроме моего исполняемого JAR-файла, который вообще не является пакетом OSGi.

Почему я получаю эту ошибку?

Обновление

Проблема, похоже, связана с целью комплектации Maven Bundle Plugin v4.1.0

В одном стартапе JAR с комплектной упаковкой у меня есть:

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>  
            <configuration>
                <versions>
                    <module.b.osgi.version.clean>${project.version}</module.b.osgi.version.clean>
                </versions>
            </configuration>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>cleanVersions</goal>
                    </goals>
                </execution>
            </executions>     
        </plugin>

В файле свойств с фильтрацией ресурсов, установленной в true, у меня есть:

org.osgi.framework.system.packages.extra=${module-b.packages}

module-b.packages=${module-a.packages}, \
org.mymodule.b;version="${module.b.osgi.version.clean}", \
${foo-${foo.specification.version}}

В сгенерированном каталоге target / classes у меня, как и ожидалось:

org.osgi.framework.system.packages.extra=${module-b.packages}

module-b.packages=${module-a.packages}, \
org.mymodule.b;version="0.14.0.SNAPSHOT",  \
${foo-${foo.specification.version}}

Но в банке он вдруг выглядит так:

org.osgi.framework.system.packages.extra=${module-b.packages}

module-b.packages=${module-a.packages}, \
org.mymodule.b;version="0.14.0.SNAPSHOT", \

Каким-то образом ${foo-${foo.specification.version}} разделили до пустой строки!

Обновление 2

Поскольку это происходит в коде запуска, мой текущий обходной путь - изменить тип упаковки обратно на jar. Чистая версия OSGi по-прежнему заменяется, но файл Manifest больше не содержит записей OSGi.

1 Ответ

0 голосов
/ 13 ноября 2018

Я думаю, что это ошибка регрессии в Maven Bundle Plugin.

Я подал вопрос здесь: https://issues.apache.org/jira/browse/FELIX-5980

...