exportsは公開。
opensは非公開、reflectionのみ可能
requiresでモジュール取り込み
以下のサンプルは、
ParentProject side、opensでreflection可能し、Factoryを公開、
ChildProject side、requiresし、invoke。
なお、other-projectはnetbeansでbuild-timeに出力されるjarをお互いにbuild-pathにいれてある。これによりモジュールとして参照ができるようになる
ParentProject/default-package.module-info.java
module ParentModule {
opens parentproject to ChildModule;
exports publicpackage;
}
ParentProject/parentproject.ParentProject.java
public class ParentProject {
public static void main(String[] args) {
new ParentProject().method();
}
public void method() {
System.out.println(" i am parentproject method");
}
}
ParentProject/publicpackage.Factory.java
public class Factory {
public static ParentProject create() {
return new ParentProject();
}
}
ChildProject/default-package.module-info.java
module ChildModule {
requires ParentModule;
}
ChildProject/chileproject.ChildProject.java
public class ChildProject {
public static void main(String[] args) {
Object o = Factory.create();
try{
Method m = o.getClass().getMethod("method");
m.invoke(o);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
実行結果
i am parentproject method