NetBeansのモジュール側からjarファイルをプロジェクトのクラスパスに追加したかった!
ライブラリに登録してあるものに関しては、色々情報があったけど、jarファイルを直接登録する方法は、なかなか見つからなかったのでメモする。
ポイントとなるクラスは、以下の1つのクラス。
org.netbeans.api.java.project.classpath.ProjectClassPathModifier
このクラスのaddRoots(URL[] classPathRoots, FileObject projectArtifact, String classPathType)このメソッドで追加できた。
各々の引数には、下記の値を渡す。
classPathRoots:FileUtil.getArchiveRoot(jarファイルのFileObject).getURL()したもの
projectArtifact:プロジェクトのソースフォルダのFileObject
classPathType:ClassPathクラスに定義されている定数(COMPILEかな)
ということで、プロジェクトフォルダの下にlibフォルダにあるhoge.jarを追加する場合のコードは下のような感じになる。
Project project = ....; // ProjectはどうにかしてとってくるFileOwnerQueryとかで
Sources sources = project.getLookup().lookup(Sources.class);
// ソースフォルダ取得
SourceGroup sourceGroup = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
// jarのFileObjectを取得
FileObject libDir = project.getProjectDirectory().getFileObject("lib");
FileObject hogeJar = libDir.getFileObject("hoge.jar");
FileObject hogeArchiveRoot = FileUtil.getArchiveRoot(hogeJar);
ProjectClassPathModifier.addRoots(new URL[]{ hogeArchiveRoot.getURL() }, sourceGroup.getRootFolder(), ClassPath.COMPILE);
たったこれだけなのに午後いっぱいくらい使ってしまったorz
因みに参考情報:http://fisheye5.cenqua.com/browse/sailfin/tools/netbeans/sip/src/main/java/org/jvnet/glassfish/comms/netbeans/sip/module/SIPProvider.java?r=1.6