У меня есть prorgam Thats порождающие исходный код и хотите скомпилировать этот исходный код во время выполнения Java-среды выполнения, как:Howto правильно добавить скомпилированные файлы классов в банку со структурой пакета
generateSource()
compileSource()
я использую JavaCompiler от ToolProvider :
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 classdirectory в список опций.
У меня есть 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?
Есть ли способ, я получаю только структуру пакета файлов класса в моем банке?
Я думал об этом , но с этим все еще можно найти JarEntries? – Gobliins
Я не знаю, честно говоря, и я не могу это проверить. Может быть, вам стоит просто попробовать, а потом посмотреть, куда он идет? – Soana
ok все еще компилируется, когда мне удается работать со всеми зависимостями, я могу принять этот ответ – Gobliins