Я хочу обернуть стороннюю банку. К сожалению, поставщик поместил один единственный класс (a.class) одним методом в пакет по умолчанию.Оберните стороннюю банку, которая импортирует из пакета по умолчанию с помощью bndtools
Когда я пытаюсь включить ресурс, используя Include-Resource: @lib/acme-8.0.jar
, это приводит к следующей ошибке:
The default package '.' is not permitted by the Import-Package syntax.
This can be caused by compile errors in Eclipse because Eclipse creates valid class files regardless of compile errors.
The following package(s) import from the default package [com.acme.util]
bnd print -all acme-8.0.jar
дает мне следующий вывод (сокращенный, имя поставщика заменяется акме)
[API USES]
. []
com.acme.common []
com.acme.acmedrt [com.acme.acmedrt.types, com.acme.acmedrt.comm.jobtransport, com.acme.acmedrt.workflow.type
s]
com.acme.acmedrt.impl [com.acme.acmedrt, com.acme.acmedrt.types, org.apache.commons.logging, com.acme.acmedrt.imp
l.types, com.acme.acmedrt.comm.jobtransport, com.acme.acmedrt.pool, org.apache.commons.pool, com.acme.acmedrt.workflow.types]
com.acme.acmedrt.impl.types [com.acme.acmedrt.types, com.acme.acmedrt, com.acme.acmedrt.impl, org.xml.sax]
com.acme.acmedrt.notification [com.acme.acmedrt]
com.acme.acmedrt.pool [com.acme.acmedrt, com.acme.acmedrt.impl.types, com.acme.acmedrt.impl, com.acme.acmedrt.types,
org.apache.commons.pool, com.acme.acmedrt.workflow.types]
com.acme.acmedrt.types [com.acme.acmedrt, com.acme.common]
com.acme.acmedrt.util []
com.acme.acmedrt.workflow.types [com.acme.common]
com.acme.tools []
com.acme.util []
com.acme.util.xml []
[LIST]
a.class
META-INF
MANIFEST.MF
com
com <no contents>
com/acme
com/acme <no contents>
com/acme/common
Enum.class
com/acme/acmedrt
[...]
Если я правильно понимаю этот вывод, несколько пакетов используют пакет по умолчанию. Как это вообще возможно? Насколько я знаю, вы не можете импортировать классы из пакета по умолчанию.
Я уже связался с продавцом с просьбой переместить класс нарушения. Скорее всего, он не будет следовать моему предложению.
Есть ли обходной путь для обработки классов в пакете по умолчанию?
Это правда, что вы не можете импортировать пакет по умолчанию в OSGi. Но должно быть хорошо иметь классы из пакета по умолчанию внутри вашего пакета. –
@NeilBartlett Возможно, но bnd не может создать пакет из данной банки, в результате чего появляется сообщение об ошибке выше. –
Похоже, что класс - это пакет по умолчанию, указанный в API других пакетов. Отсюда сообщение об ошибке. –