#java #eclipse
#java #eclipse
Вопрос:
в плагине eclipse у меня есть два плагина, которые используют там собственный загрузчик классов для загрузки классов .. 2 основная проблема
Случай 1:- в 1-м плагине я создал одноэлементный класс, и когда я захочу, он установит какое-либо свойство из другого плагина (потому что одноэлементный, поэтому каждый объект будет изменять один и тот же объект), но он не может делать то же, что я принимаю .. потому что для каждого загрузчика классов есть свой собственный одноэлементный объект….
Случай 2: — в 1-м или 2-м плагине я создал класс с одним static
свойством и через другой плагин я хочу получить доступ к этому свойству…
я хочу получить доступ к этому свойству, но не могу, потому что у каждого загрузчика классов есть собственное пространство имен, что означает наличие собственной статической переменной…
то, что я сделал, это :-
1. я создаю класс в 1-м плагине с static String
переменной
2. через 2-й плагин я устанавливаю значение этого свойства
3. когда я использую его через 1-й, это показывает его значение null
, и если через 2-й, то это показывает то, что я установил ранее. Теперь проблема в том, как я могу получить к ним доступ property…in случай 1 и случай 2
Комментарии:
1. «потому что для каждого загрузчика классов существует свой собственный одноэлементный объект ….» Вы хотите сказать, что вы загружаете один и тот же плагин несколько раз в разных загрузчиках классов? Потому что, если все эти загрузчики классов используют один и тот же «родительский» загрузчик классов для доступа к вашему плагину, тогда он все равно должен быть одноэлементным.
2. Я не загружаю один и тот же класс несколько раз, я просто хочу использовать свойство моего класса в другом плагине, но сейчас это не так.
Ответ №1:
В Eclipse каждый пакет OSGi (плагин) имеет свой собственный загрузчик классов. Они не иерархичны по сравнению с другими пакетами.
Но если вы определяете статическую переменную в plugin1 и хотите получить к ней доступ из plugin2, у вас будет plugin2 Import-Package
или Require-Bundle
путем редактирования plugin2 MANIFEST.MF. ex: , если это был plugin2’s MANIFEST.MF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui.examples.propertysheet; singleton:=true
Bundle-Version: 3.2.200.qualifier
Bundle-Activator: org.eclipse.ui.examples.propertysheet.PropertySheetPlugin
Bundle-Vendor: %Plugin.providerName
Bundle-Localization: plugin
Require-Bundle: plugin1
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.ui.examples.propertysheet
Bundle-RequiredExecutionEnvironment: J2SE-1.4
Import-Package
и Require-Bundle
являются ли правильные способы просмотра классов из одного пакета в другом пакете, при условии, что пакеты также используют Export-Package
Комментарии:
1. 1 И если вы это сделаете, рассматриваемый класс (и его одноэлементное поле) будет существовать только в одном месте и будет общим.
2. Пожалуйста, обновите свой вопрос с помощью 2 MANIFEST.MFs. Это работает, вы, должно быть, немного неправильно настроены.