lg3d-core.jar を CLASSPATH に追加する
プロジェクトはできました。でも、これだけじゃ LG3D のアプリケーションをコンパイルできません。
昨日の最後の図を見てもらえば分かると思うのですが、そう、lg3d-core.jar が CLASSPATH にないのです。
というわけで、追加しましょう。
JavaCapabilityConfigurationPage#init メソッドの第 3 引数で CLASSPATH が指定できそうなので、次のように記述してみました。
javaPage = new JavaCapabilityConfigurationPage(){ public void setVisible(boolean visible) { if (visible) { project = creationPage.getProjectHandle(); IJavaProject javaProject= JavaCore.create(project); IPreferenceStore store = WrpePlugin.getDefault().getPreferenceStore(); String home = store.getString(WrpePlugin.LG3D_RREF_HOME_KEY); Path corePath = new Path(home + CORE_LIBRARY); IClasspathEntry[] entries = new IClasspathEntry[1]; entries[0] = JavaCore.newLibraryEntry(corePath, null, null); init(javaProject, null, entries, true); } else { } super.setVisible(visible); } };
実行すると...
ありゃ、今度は JRE System Library がなくなってしまいました。
JavaCapabilityConfigurationPage#init の Javadoc を見ると... あっ、間違い発見 ^^;; 引数の defaultOutputLocation と defaultEntries の説明が逆になってます。で、逆になっている説明を読むと、ここで設定できるのはデフォルトのクラスパスだけのようです。
それじゃぁ、デフォルトの CLASSPATH もいっしょに entries に入れてあげればいいのかもしれません。IJavaProject インタフェースには getResolvedClasspath メソッドというのがあって、CLASSPATH を取得できるようです。
そこで、次のように書きかえてみました。
javaPage = new JavaCapabilityConfigurationPage(){ public void setVisible(boolean visible) { if (visible) { project = creationPage.getProjectHandle(); IJavaProject javaProject= JavaCore.create(project); IClasspathEntry[] defaultEntries = new IClasspathEntry[0]; try { defaultEntries = javaProject.getResolvedClasspath(false); } catch (JavaModelException e) { e.printStackTrace(); } IPreferenceStore store = WrpePlugin.getDefault().getPreferenceStore(); String home = store.getString(WrpePlugin.LG3D_RREF_HOME_KEY); Path corePath = new Path(home + CORE_LIBRARY); IClasspathEntry[] entries = new IClasspathEntry[defaultEntries.length + 1]; System.arraycopy(defaultEntries, 0, entries, 0, defaultEntries.length); entries[defaultEntries.length] = JavaCore.newLibraryEntry(corePath, null, null); init(javaProject, null, entries, true); } else { } super.setVisible(visible); } };
ところが、これで実行すると...
Java Model Exception: Java Model Status [sample does not exist] at org.eclipse.jdt.internal.core.JavaElement.newNotPresentException(JavaElement.java:468) at org.eclipse.jdt.internal.core.JavaModelManager.getPerProjectInfoCheckExistence(JavaModelManager.java:1223) at org.eclipse.jdt.internal.core.JavaProject.getPerProjectInfo(JavaProject.java:1785) at org.eclipse.jdt.internal.core.JavaProject.getRawClasspath(JavaProject.java:1842) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1948) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1888) at jp.gr.java_conf.skrb.lg3d.wrpe.wizard.LG3DProjectWizard$2.setVisible(LG3DProjectWizard.java:93) 以下延々と続く...
そういえば、まだプロジェクトをクリエイトしていないので、こうなるのは当然ですね ^^;;