2013-10-14 4 views
0

Я унаследовал приложение, написанное в java для среды RCP (eclipse).Получение приложения RCP для запуска

Код поставляется в комплекте с системой сборки (maven) и файлами pom, и все, кажется, создается.

Окончательное приложение exe не может работать. Я получаю всплывающее окно с ошибкой, а затем ссылку на файл журнала, описывающий многочисленные ошибки. Проблема в том, что я очень новичок в RCP, я почти не знаю, что такое OSGI, и я не понимаю всех maven. Поэтому мне трудно понять, в чем проблема, или даже с чего начать.

Файл журнала начинается так:

ENTRY org.eclipse.osgi 4 0 2013-10-14 13: 38:! 14,717 СООБЩЕНИЕ Ошибка приложения СТЕК 1 java.lang.RuntimeException : Приложение «com.company.prod.app.rcp.application» не удалось найти в реестре . Приложения доступны: org.eclipse.equinox.app.error, org.eclipse.help.base.infocenterApplication, org.eclipse.help.base.helpApplication, org.eclipse.help.base.indexTool. на org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp (EclipseAppContainer.java:242) на org.eclipse.equinox.internal.app.MainApplicationLauncher.run (MainApplicationLauncher.java:29) в орг. eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication (EclipseAppLauncher.java:110) на org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start (EclipseAppLauncher.java:79) в орг. eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:368) на org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:179) в sun.reflect.NativeMethodAccessorImpl.invok е0 (Родной метод) при sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.eclipse.equinox.launcher.Main.invokeFramework (Main.java:559) по адресу org.eclipse.equinox.launcher.Main.basicRun (Main.java:514) по адресу org. eclipse.equinox.launcher.Main.run (Main.java:1311)

ENTRY org.eclipse.osgi 2 0 2013-10-14 13: 38: 14,751 MESSAGE Один или несколько расслоения не решаются, потому что следующие ограничения корня не разрешены:! SUBE NTRY 1 org.eclipse.osgi 2 0 2013-10-14 13: 38: 14.751 СООБЩЕНИЕ Комплект [email protected]/com.company.prod.app.data_2.0.5-SNAPSHOT.jar не был разрешен. SUBENTRY 2 com.company.prod.app.data 2 0 2013-10-14 13: 38: 14.751! СООБЩЕНИЕ Отсутствует импортированный пакет microsoft.sql_0.0.0.

ENTRY org.eclipse.osgi 2 0 2013-10-14 13: 38: 14,778 СООБЩЕНИЕ Ниже приведен полный список жгуты, которые не будут решены, см Входа до журнала для первопричину, если он существует:

Далее он перечисляет все пакеты в приложении, перечисленные в качестве версии 0.0.0. Я предполагаю, что номер версии имеет какое-то отношение к проблеме, поскольку у них, конечно же, нет версии 0.0.0.

Поиск по всем файлам pom.xml не будет отображать ни одну зависимость как версию 0.0.0.

Я не понимаю, откуда импортируется пакет microsoft.sql_0.0.0, упомянутый как причина «root». Я знаю, что в коде используется microsoft.sqlserver. Он импортируется в одном Java файл, например:

import com.microsoft.sqlserver.jdbc.SQLServerException; 

И пакет, содержащий этот оператор импорта имеет microsoft.sqlserver в списке зависимостей, например:

<dependency> 
    <groupId>com.microsoft.sqlserver</groupId> 
    <artifactId>sqljdbc</artifactId> 
    <version>4.0</version> 
</dependency> 

Кроме того, есть " расслоение»где-то, что экспорт его, как это (?):

<Export-Package> 
    org.hsqldb.*, 
com.microsoft.sqlserver.* 
</Export-Package> 

Так, мне кажется, будет экспортироваться и импортироваться правильно. Но я не понимаю, что это хорошо (или это ошибка osgi или rcp, даже не уверена).

Также. Я sqlserver.sqljdbc в моем хранилище Maven, по адресу:

.m2\repository\com\microsoft\sqlserver\sqljdbc\4.0 

Любые намеки на то, как попытаться решить эту проблему будут оценены.

ответ

0

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

Я не заметил, что отсутствующий импорт был microsoft.sql, а не com.microsoft.sqlserver. Я не знаю, что такое microsoft.sql, или как оно автоматически добавляется к импорту в файле манифеста, но оно (возможно, оно используется com.microsoft.sqlserver.XXXX?). Добавление microsoft.sql в пакет export-package решило проблему.

Я не верю, что моя проблема имела какое-либо отношение к версии 0.0.0. Похоже, что это только версия по умолчанию и должна быть явно объявлена ​​в разделе экспорта/импорта, которое должно быть изменено, что никогда не выполняется нигде. Я перепутал его с разделами. Я не знал, что такое OSGI, и что проект использует плагин felix.

0

Хорошо ... Я думаю, вы должны начать понимать, как работает Maven, во-первых. Вы читали Maven documentation? Когда я впервые работал с Maven, я написал небольшое приложение, используя Maven для включения всех зависимостей jar.

Вкратце, мы надеемся, простое объяснение: С Maven вы можете управлять зависимостями вне проекта таким образом, чтобы артефакты (например, сторонние JAR, такие как пакет драйверов Microsoft SQL) сохранялись в репозитории Maven и если необходимо. Благодаря этому вы можете создать центральный центр для управления артефактами для ваших сборников, а также в разных версиях. 0_0_0 ist заявленная версия - см. Объявление зависимости.

После всего этого, я думаю, было бы полезно прочитать OSGi article on wikipedia (если вы еще этого не сделали) и начать с учебника RCP Eclipse. Рамка Eclipse RCP действительно сложна, поэтому планируйте соответственно. К сожалению, это не то, чему научились через два или три дня.

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