1つ前の投稿とのあわせ技で、プラグイン内に埋め込んだjarファイルをプロジェクトの下のlibフォルダにコピーしてクラスパスに追加するということが出来る。
spring.jarをコピーして追加してクラスパスに追加するコードは下のようになる。
まず、プラグインのプロジェクトの適当なパッケージにjarを追加する。
ここでは、org/yourorghere/module3/spring.jarに置いたとして話を進める。
そして、layer.xmlに登録する。
<folder name="MyArchives">
<file name="spring.jar" url="nbresloc:/org/yourorghere/module3/spring.jar"></file>
</folder>
後はコードで、コピって追加するだけ。
Project project = ....; // プロジェクトはどうにかしてとってくる
Sources sources = project.getLookup().lookup(Sources.class);
SourceGroup[] groups = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
// ファイルシステムからjarを取得
FileSystem fs = Repository.getDefault().getDefaultFileSystem();
FileObject springJar = fs.getRoot().getFileObject("MyArchives/spring.jar");
try {
// libフォルダを作ってコピーする
FileObject libDir = project.getProjectDirectory().createFolder("lib");
FileUtil.copyFile(springJar, libDir, springJar.getName());
// jarファイルをクラスパスへ追加する
FileObject[] jars = libDir.getChildren();
URL[] uris = new URL[jars.length];
for (int i = 0; i < jars.length; i++) {
uris[i] = FileUtil.getArchiveRoot(jars[i]).getURL();
}
ProjectClassPathModifier.addRoots(uris, groups[0].getRootFolder(), ClassPath.COMPILE);
} catch (MalformedURLException ex) {
Exceptions.printStackTrace(ex);
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
} catch (UnsupportedOperationException ex) {
Exceptions.printStackTrace(ex);
}
今日は、これがわかっただけで満足。
来週ものは作ろう。