2016-02-26 10 views
0

Я работаю над 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, когда он ссылается на дополнительные системные пакеты из базового веб-приложения?

+0

Есть ли диапазон версий в заголовке Import-Package? Если да, то версия, которая соответствует, также должна быть определена в свойстве system.package.extra. –

+0

Нет версии, просто имена пакетов. В противном случае это был бы простой вопрос! – peveuve

+0

Не могли бы вы предоставить полный стек? почему исключение «Неразрешенные проблемы компиляции»? –

ответ

1

Это не ошибка OSGi. Это результат развертывания кода, который не скомпилирован правильно.

Eclipse использует собственный компилятор ECJ, а не javac из JDK, который ведет себя по-разному, когда он сталкивается с ошибками. В то время как javac немедленно останавливается и не производит никакого вывода, ECJ создает файлы классов в качестве вывода. Однако, если вы попытаетесь запустить эти классы вообще, вы получите сообщение, которое вы видели:

java.lang.Error: Unresolved compilation problems: 
    The import xxx.xxxxxxxx cannot be resolved 

сообщение о «импорте не может быть разрешено» от компилятора Java. Если вы посмотрите на исходный код в своей среде IDE, вы увидите красные метки X.

В принципе, вы должны убедиться, что ваш код действительно компилируется без ошибок, прежде чем пытаться его запустить.

+0

Как вы планируете компилировать проект плагина Eclipse при использовании системных пакетов? У меня нет ошибки компиляции в моем проекте плагина Eclipse, потому что я помещаю основной проект в путь сборки плагина. Вероятно, это не так. – peveuve

+0

Я не знаю, какой инструмент вы используете. Когда вы компилируете Java-код с помощью компилятора 'javac', он уже имеет видимость системных пакетов, конечно, вам не нужно ничего особенного делать. –

+0

Мои пакеты должны импортировать пользовательские пакеты из самого webapp, а не пакетов JDK. Они объявляются дополнительными системными пакетами при запуске среды OSGI. – peveuve

 Смежные вопросы

  • Нет связанных вопросов^_^