Я работаю над webapp, где запускаю osgi framework в слушателе контекста сервлета (Eclipse Equinox версии 3.10.0). Webapp работает в Tomcat 8 с Java 7. Я разработал и установил 2 простых пакета, работающих хорошо, если они используют свои внутренние классы. Но когда я пытаюсь импортировать WebAPP пакеты в пучках с system.package.extra конфигурации, связки не в состоянии решить эти пакеты:Как скомпилировать проект плагина Eclipse, ссылаясь на дополнительные системные пакеты из базового webapp?
java.lang.Error: Unresolved compilation problems:
The import xxx.xxxxxxxx cannot be resolved
Каркас объявляет дополнительные системные пакеты таким образом:
public void contextInitialized(ServletContextEvent cntxt) {
Iterator<FrameworkFactory> frameworkFactoryIt = ServiceLoader.load(FrameworkFactory.class).iterator();
boolean frameworkStarted = false;
while (frameworkFactoryIt.hasNext() && !frameworkStarted) {
FrameworkFactory frameworkFactory = frameworkFactoryIt.next();
Map<String, String> config = new HashMap<String, String>();
config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "xxx.xxxxxxxx,...");
config.put(Constants.FRAMEWORK_STORAGE, "https://stackoverflow.com/users/peveuve/osgi-cache");
config.put(Constants.FRAMEWORK_STORAGE_CLEAN, "true");
framework = frameworkFactory.newFramework(config);
framework.start();
....
расслоение МАНИФЕСТ выглядит следующим образом:
Import-Package: org.osgi.framework;version="1.3.0",
xxx.xxxxxxxx;resolution:=optional,
Импортный пакет сделан опциональным, чтобы избежать ошибок в Plug-In PROJEC Eclipse, т. Я не использую управление версиями.
При перечислении рамочных заголовков, я заметил, есть пробел между пакетами системы и моими дополнительными системными пакетами в Экспортно-пакете:
...,org.xml.sax.helpers, xxx.xxxxxxxx,...
Поскольку добавляются фреймворк, я полагаю, это не проблема, но кто знает.
Вот полный StackTrace:
!SESSION 2016-02-26 16:07:35.175 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_79
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=fr_FR
!ENTRY com.amfinesoft.kheops.service.user 4 0 2016-02-26 16:07:35.176
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.ServiceException: Exception in com.amfinesoft.kheops.service.user.UserServiceFactory.getService()
at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:222)
at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111)
at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45)
at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:496)
at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461)
at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:619)
at com.amfinesoft.kheops.consumer.user.UserConsumerActivator.start(UserConsumerActivator.java:24)
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:771)
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:764)
at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:721)
at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:936)
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:319)
at org.eclipse.osgi.container.Module.doStart(Module.java:571)
at org.eclipse.osgi.container.Module.start(Module.java:439)
at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:454)
at org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.java:717)
at org.eclipse.osgi.container.ModuleContainer.resolveAndApply(ModuleContainer.java:491)
at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:437)
at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:427)
at org.eclipse.osgi.container.Module.start(Module.java:416)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1562)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
at org.eclipse.osgi.container.SystemModule.startWorker(SystemModule.java:242)
at org.eclipse.osgi.container.Module.doStart(Module.java:571)
at org.eclipse.osgi.container.Module.start(Module.java:439)
at org.eclipse.osgi.container.SystemModule.start(SystemModule.java:172)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:393)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:412)
at org.eclipse.osgi.launch.Equinox.start(Equinox.java:115)
at com.amfinesoft.kheops.service.starter.OSGIServletContextListener.contextInitialized(OSGIServletContextListener.java:60)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.Error: Unresolved compilation problems:
The import com.eclipsesource cannot be resolved
The import com.eclipsesource cannot be resolved
The import kheops cannot be resolved
The import kheops cannot be resolved
The import kheops cannot be resolved
The import system cannot be resolved
The type UserServiceImpl must implement the inherited abstract method UserServiceIntf.listOfUsers(KCommand, KBrowser)
KCommand cannot be resolved to a type
KCommand cannot be resolved to a type
KBrowser cannot be resolved to a type
JsonArray cannot be resolved to a type
JsonArray cannot be resolved to a type
The method getTrees() is undefined for the type DBUserFinder
The method getTrees() is undefined for the type DBUserContainer
JsonValue cannot be resolved
Logger cannot be resolved
KCommandProcessor cannot be resolved
at com.amfinesoft.kheops.service.user.impl.UserServiceImpl.<init>(UserServiceImpl.java:7)
at com.amfinesoft.kheops.service.user.UserServiceFactory.getService(UserServiceFactory.java:14)
at com.amfinesoft.kheops.service.user.UserServiceFactory.getService(UserServiceFactory.java:1)
at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210)
... 41 more
Любая идея, почему возникает такая ошибка?
Как скомпилировать проект плагина Eclipse, когда он ссылается на дополнительные системные пакеты из базового веб-приложения?
Есть ли диапазон версий в заголовке Import-Package? Если да, то версия, которая соответствует, также должна быть определена в свойстве system.package.extra. –
Нет версии, просто имена пакетов. В противном случае это был бы простой вопрос! – peveuve
Не могли бы вы предоставить полный стек? почему исключение «Неразрешенные проблемы компиляции»? –