java -definir a localização da manualmente arquivos de classe compilados
-
21-12-2019 - |
Pergunta
Eu criei uma classe para compilar manualmente meu .arquivos java para .arquivos de classe.Este programa funciona com êxito .Mas, .classe de arquivos são criados no mesmo diretório como o meu .arquivos java.Mas, eu quero que eles sejam criados em algum diretório personalizado.O que posso fazer?
Abaixo está o código que eu estou usando para compilar .arquivos java.:-
//***************************//
//isto irá compilar meu .o arquivo java para .arquivo de classe e armazene-o no mesmo local
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);
}
}
//este método tenta mover (por copiar e colar) o meu gerado .arquivo de classe no diretório personalizado.mas dá algum erro como mau arquivo de classe:mycustomdir\MarketWatchBean.class classe ficheiro contém errado classe:mycustomdir.MarketWatchBean Por favor, remova ou certifique-se de que ele aparece no subdiretório correto do classpath.
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();
}
}
Solução
Você tem que passar a opção -d dest_directory
para o método de compiler.run(null,null,null,"-d destdirectory",fileToCompile);
Certifique-se de que o diretório de destino já existe.
Do documentação,
int run(InputStream in,
OutputStream out,
OutputStream err,
String... arguments)
Você pode passar um número variável de argumentos para a ferramenta.eu.e javac opções da ferramenta devem ser passados como argumentos para esse método