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();
            }
        }
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top