Java -Setting расположение вручную скомпилированных файлов классов
-
21-12-2019 - |
Вопрос
Я создал класс, чтобы вручную компилировать свои файлы .java в файлы .class.Эта программа успешно работает.Но .Class файлы создаются в одном каталоге, что и мои файлы .java.Но я хочу, чтобы они были созданы в каком-то кастомном каталоге.Что я могу сделать?
Ниже приведен код, который я использую для компиляции файлов .java.: -
// * ** * ** * ** * ** * ** * ** * ** * ** * ** //
// Это будет компилировать файл .java в файл .class и хранить его в том же месте
public void compileFile(String pageName,String packageName) {
String fileToCompile = packageName + pageName +".java";
System.out.println("String to compile :- " + fileToCompile );
System.setProperty("java.home", "C:\\install\\Java\\jdk1.7");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
// this.deleteFiles(fileToCompile);
}
}
.
// Этот метод пытается переместить (копировать и вставить) мой сгенерированный файл .Class в пользовательский каталог. Но это дает некоторую ошибку, как файл плохого класса: MyCustomdir \ MarketWatchBean.Class Класс файл содержит неправильный класс: mycustomdir.marketwatchbatchbean Пожалуйста, удалите или убедитесь, что он появляется в правильном подкаталоге класса.
public void moveFiles(String sourcePath, String destPath){
InputStream inStream = null;
OutputStream outStream = null;
try{
File afile =new File(sourcePath);
File bfile =new File(destPath);
inStream = new FileInputStream(afile);
outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024];
int length;
//copy the file content in bytes
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
//delete the original file
// afile.delete();
System.out.println("File is copied successfully!");
}catch(IOException e){
// this.deleteFiles(sourcePath);
// this.deleteFiles(destPath);
e.printStackTrace();
}
}
. Решение
Вы должны пропустить вариант -d dest_directory
к методу compiler.run(null,null,null,"-d destdirectory",fileToCompile);
, пожалуйста, убедитесь, что каталог назначения уже существует.
из Документация ,
int run(InputStream in,
OutputStream out,
OutputStream err,
String... arguments)
.
Вы можете пройти переменное количество аргументов инструменту.Варианты инструмента I.e Javac должны быть переданы как аргументы для этого метода