【发布时间】:2016-01-25 16:13:02
【问题描述】:
我有一个生成源代码的程序,并希望在 java 运行时执行期间编译此源代码,例如:
generateSource()
compileSource()
我使用 ToolProvider 的 JavaCompiler:
ArrayList<String> optionList = new ArrayList<String>();
System.out.println("Retrieve dependendcy Jars");
ArrayList<File> jarfiles = getJarFiles(this.libdir);
String libpath = System.getProperty("java.class.path") + convertJarFilesToClassPath(jarfiles);
optionList.addAll(Arrays.asList("-d", this.genClassDir ));
optionList.addAll(Arrays.asList("-classpath", libpath));
ArrayList<File> files1 = getSourceFiles(this.genCodeDir);
Iterable<? extends JavaFileObject> compilationUnits1 = fileManager.getJavaFileObjectsFromFiles(files1);
JavaCompiler.CompilationTask task = compiler.getTask(null ,fileManager , null, optionList, null, compilationUnits1 );
task.call();
现在重要的一行是我在选项列表中添加 -d 类目录的位置。
我有这个 genClassDir /gen/classes 我所有的 .class 文件都在里面,包括子目录。
现在我的 jar 文件中的问题是,类文件在包结构之前具有 genClassDir 作为前缀。
./gen/classes/foo/
./gen/classes/foo/bar/
而不是
/foo
/foo/bar
或没有前导斜杠。
我正在包装罐子,就像How to use JarOutputStream to create a JAR file? 的第一个答案一样
有没有办法只获取 jar 中类文件的包结构?
【问题讨论】:
标签: java jar java-compiler-api javacompiler