2012-07-03 2 views
0

Этот вопрос является продолжением this one. Paul Webster любезно помог мне разобраться во многих моих проблемах, но остается одна проблема с ворчанием, и я уверен, что это сводится к проблеме с classpath, когда я экспортирует плагин, в отличие от того, когда я отладки плагин.Плагин Eclipse: Debug vs. Export Classpath

Это сомнительная информация я понял, до сих пор, по очищая информации из различных источников в Интернете (для которого this page был неоценимым ресурсом):

  • Плагины полностью полагаться на Bundle-Classpath в файле MANIFEST.MF. Если класс не может быть найден ни в библиотеке JRE System, то в зависимостях плагинов или в папке или JAR в Bundle-Classpath произойдет исключение NoClassDefFound или NoClassFound.
  • Require-Bundle только для комплектов, которые я создаю. (Другими словами, связки в моей рабочей области. Это означает, что мой список Require-Bundle будет довольно коротким.)
  • Используйте Import-Package для сторонних пакетов, которые требуется моему пакету. Этот список может быть довольно большим, в зависимости от количества сторонних пакетов, которые я использую.
  • Если мне нужен сторонний пакет, и он не экспортируется, мне нужно создать пакет для него и экспортировать этот пакет. Затем в пакете, который требует этого, мне нужно импортировать пакет для экспорта.
  • Если сам комплект содержит пакеты внутри пакета и экспортирует их, никогда не помещайте эти пакеты в манифест в качестве импортированных пакетов. (Другими словами, не Реэкспорт пакеты, которые уже экспортированных пучком.)

(я буду обновлять информацию выше, поскольку община корректирует его.)

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

Когда я пытаюсь экспортировать плагин, все проекты компилируются, кроме одного. Файл журнала содержит следующее сообщение:

# 7/3/12 10:09:57 AM EDT 
# Eclipse Compiler for Java(TM) 0.A76_R36x, 3.6.2, Copyright IBM Corp 2000, 2010. All rights reserved. 
---------- 
1. ERROR in E:\NotesDev\NotesPlugin\com.auth.lotusplugin.popdlg\src\com\auth\lotusplugin\popdlg\SettingsDialog2.java (at line 0) 
    package com.auth.lotusplugin.popdlg; 
    ^
The type com.ibm.rcp.swt.swidgets.SCoolBar cannot be resolved. It is indirectly referenced from required .class files 
---------- 
1 problem (1 error) 

Теперь, я определил, что com.ibm.rcp.swt.swidgets.SCoolBar экспортируется com.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jar, что также случается, экспортируемые com.ibm.rcp.jfaceex_6.2.2.20100729-1241.jar. В моем проекте, я сделал следующее:

  1. Добавлен com.ibm.rcp.jfaceex в качестве дополнительного расслоения build.properties через вкладку Зависимости.
  2. Добавлен com.ibm.rc.swt.swidgets в качестве импортированного пакета на вкладке «Зависимости».

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

Если кто-то может помочь мне решить этот последний вопрос, я бы очень признателен.

Соответствующие части файлов MANIFEST.MF и build.properties приведены ниже для справки.

MANIFEST.MF

Require-Bundle: com.ibm.lotuslabs.context.service, 
com.ibm.lotuslabs.ui, 
com.SatuitCRM.WebServices 
Import-Package: com.ibm.rcp.jface.action, 
com.ibm.rcp.swt.swidgets, 
javax.swing, 
lotus.domino, 
lotus.notes, 
org.eclipse.jface.action, 
org.eclipse.jface.window, 
org.eclipse.swt, 
org.eclipse.swt.events, 
org.eclipse.swt.graphics, 
org.eclipse.swt.layout, 
org.eclipse.swt.widgets, 
org.eclipse.ui.plugin, 
org.osgi.framework 
Export-Package: com.auth.lotusplugin.popdlg; 
    uses:="com.ibm.rcp.jface.action, 
    com.ibm.lotuslabs.context.service.document, 
    com.ibm.lotuslabs.ui, 
    com.ibm.rcp.jface.action, 
    com.ibm.rcp.swt.swidgets, 
    com.satuit.core, 
    com.SatuitCRM.WebServices, 
    javax.swing, 
    lotus.domino, 
    lotus.notes, 
    org.eclipse.jface.action, 
    org.eclipse.jface.window, 
    org.eclipse.swt, 
    org.eclipse.swt.events, 
    org.eclipse.swt.graphics, 
    org.eclipse.swt.layout, 
    org.eclipse.swt.widgets, 
    org.eclipse.ui.plugin, 
    org.osgi.framework" 
Bundle-ClassPath: ., 
com.satuit.core.jar, 
com.ibm.lotuslabs.ui.jar, 
com.ibm.lotuslabs.context.service.jar, 
com.SatuitCRM.WebService.jar, 
lib/activation-1.1.1.jar, 
lib/commons-lang3-3.1.jar, 
lib/mail.jar, 
lib/SatuitCRM_XML_API2.jar 

build.properties

source.. = src/ 
output.. = bin/ 
bin.includes = META-INF/,\ 
       plugin.xml,\ 
       lib/commons-lang3-3.1.jar,\ 
       lib/activation-1.1.1.jar,\ 
       lib/mail.jar,\ 
       lib/SatuitCRM_XML_API2.jar,\ 
       . 
additional.bundles = com.ibm.rcp.browser.ie,\ 
        com.ibm.rcp.jfaceex 

ответ

1

Не имею отчетливый ответ, но, возможно, это поможет:

Я думать что вам просто нужно правильно настроить целевую платформу. Убедитесь, что ваша целевая платформа содержит все необходимые вам узлы, которых нет в вашей рабочей области. При указании зависимости вы можете использовать Require-Bundle (или, еще лучше, Import-Package), независимо от того, находится ли пакет в вашей рабочей области или на вашей целевой платформе.

Для остальных:

  • Экспорт системных пакетов из вашего комплекта (как javax.swing), как правило, плохая идея, так как это может испортить разрешение позже. Вы действительно должны экспортировать материал из пакета, который находится в этом комплекте

  • Я не слишком хорошо знаком с конструкцией «дополнительных.объектов», это не стандартная OSGi, и я не думаю, что вам это понадобится.

+0

«дополнительные пучки» был добавлен Eclipse. Он добавляет инструкцию, если вы используете раздел * Автоматическое управление зависимостями * на вкладке «Зависимости». –