Этот вопрос является продолжением 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
. В моем проекте, я сделал следующее:
- Добавлен
com.ibm.rcp.jfaceex
в качестве дополнительного расслоенияbuild.properties
через вкладку Зависимости. - Добавлен
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
«дополнительные пучки» был добавлен Eclipse. Он добавляет инструкцию, если вы используете раздел * Автоматическое управление зависимостями * на вкладке «Зависимости». –