パッケージfoo.barをエクスポートするプラグインAがあります。パッケージfoo.barには、デフォルトのスコープメンバーを持つ抽象クラスFooBarがあります。プラグインでは、BIは同じパッケージ内でFooBarを拡張し、デフォルトのスコープフィールドにアクセスするのが好きです。
プラグインマニフェスト:
.
Bundle-SymbolicName: A
Export-Package: foo.bar
.
プラグインBマニフェスト:
.
Bundle-SymbolicName: B
Require-Bundle: A
.
プラグインAのクラスFooBar:
package foo.bar;
public abstract class FooBar{
int min = -1;
}
プラグインBのクラスMyFooBar:
package foo.bar;
public class MyFooBar extends FooBar{
public void setMin(int min){
this.min = min;
}
}
結果:
..原因:java.lang.IllegalAccessError:クラスfoo.bar.MyFooBarからフィールドfoo.bar.FooBar.minにアクセスしようとしました
通常のJava環境では、同じパッケージでクラスを定義すると、パッケージスコープのメンバーにアクセスできます。どうやらこれはOSGI-Environmentではそうではありませんね??