Я поставил несколько банок на свой Bundle-Classpath. Строка ниже показывает запись в моем pom.xml, которая использует подключаемый модуль Felix для создания файла manigest.mf для пакета.
<Bundle-ClassPath>.,lib/com.springsource.org.h2-1.0.71.jar,lib/com.springsource.org.apache.lucene-2.3.2.jar,lib/com.springsource.org.apache.lucene.search-2.3.2.jar</Bundle-ClassPath>
У этих банок есть классы, которые импортируют пакеты, но, насколько я вижу, все они имеют MANIFEST.MF, который имеет свой собственный (точный) список операторов Import-Package.
Однако, когда я создаю свой проект (используя Maven и подключаемый модуль пакета), он сообщает об ошибке, поскольку не может разрешать ссылки на определенные классы. Конкретно ошибка такая:
Unresolved references to [com.sun.tools.javac, javax.naming, javax.naming.spi, javax.servlet, javax.servlet.http, javax.sql, javax.transaction.xa]
Все эти ошибки происходят из com.springsource.org.h2-1.0.71.jar, и все эти пакеты импортируются в манифест этого jar.
Я не могу понять:
- Почему плагин пакета Maven жалуется, если эти пакеты уже импортированы в MANIFEST> MF com.springsource.org.h2-1.0.71.jar
- Почему проблемы возникают только с com.springsource.org.h2-1.0.71.jar? Я попытался удалить эту конкретную банку, и сборка прошла нормально, хотя com.springsource.org.apache.lucene.search-2.3.2.jar также имеет несколько записей для Import-Package в своем MANIFEST.MF?
Что касается второго пункта, я провел небольшое расследование и чувствую, что здесь есть закономерность. Все импорты, которые com.springsource.org.apache.lucene.search-2.3.2.jar указывает в своем манифесте, выполняются com.springsource.org.apache.lucene-2.3.2.jar, который также указан на Bundle-Classpath.
Зависимости com.springsource.org.h2-1.0.71.jar, которые удовлетворяются com.springsource.org.apache.lucene-2.3.2.jar (который находится в Bundle-Classpath), не перечислены в сообщение об ошибке, однако те зависимости, которые не удовлетворяются jar-файлами в Bundle-Classpath, перечислены в сообщении об ошибке.
Не совсем уверен, что происходит. Каково правило в отношении файлов jar, которые указаны в Bundle-Classpath? Должны ли их элементы импорта (даже если они указаны в Import-Package) их манифеста быть перечислены в pom основного проекта? Или это то, что обеспечивает плагин пакета Maven? Если последнее имеет место, есть ли способ избежать принудительного исполнения?