2014-06-05 56 views
0

我想通過使用javac命令編譯另一個java類文件中的java類文件。如果這兩個文件沒有任何軟件包名稱,它會很順利。使用javac編譯包含在另一個java類文件中的java類

類拉伊

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
public class Laj { 

     private static void printLines(String name, InputStream ins) throws Exception { 
     String line = null; 
     BufferedReader in = new BufferedReader(
      new InputStreamReader(ins)); 
     while ((line = in.readLine()) != null) { 
      System.out.println(name + " " + line); 
     } 
     } 

     private static void runProcess(String command) throws Exception { 
     Process pro = Runtime.getRuntime().exec(command); 
     printLines(command + " stdout:", pro.getInputStream()); 
     printLines(command + " stderr:", pro.getErrorStream()); 
     pro.waitFor(); 
     if(pro.exitValue() != 0){ 
      System.out.println(command + " exitValue() " + pro.exitValue());  
     }  
     } 

     public static void main(String[] args) { 
     try { 
      runProcess("javac simpleTest.java"); 
      runProcess("java simpleTest"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 
    } 

類SimpleTest的

public class simpleTest { 
    public static void main(String[] args) { 
     System.out.println("What's wrong with it"); 
    } 
} 

我可以使用命令的javac Laj.java的Java拉伊編譯和運行得很好。但是,如果我在這兩個類的前面加上包的名稱,例如包compileTest和修改拉伊的代碼runProcess部分

runProcess("javac -d . compileTest.simpleTest.java"); 
runProcess("java compileTest.simpleTest"); 

代碼將無法正常工作。

任何人都可以幫助我,謝謝。

+0

我不會期待它;包是文件夾結構,並且您的文件不在文件夾結構中。 [這個問題](http://stackoverflow.com/q/12117680/1079354),雖然不*完全*重複,可以讓你度過最初的痛苦。 – Makoto

+0

我想你需要指定類路徑。即。使用「-cp」。如果這不起作用,請使用-cp參數。 –

回答

-1

爲什麼不使用'JavaCompiler'類來編譯你的java文件。請看下面的例子我已經編譯了一個包名爲java的類。

Package Name = com.main 
Class Name = MainClass.java 
Source Dir = src 

public void compileClass() { 
     System.setProperty("java.home", "G:\\Java\\Tools\\installed\\JDK"); // Set JDK path it will help to get compiler 
     File root = new File("/src"); // Source Directory 
     File sourceFile = new File(root, "com/main/MainClass.java"); // Java file name with package 
     sourceFile.getParentFile().mkdirs(); 
     try { 
      new FileWriter(sourceFile).close(); // Read Java file 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
     System.out.println(compiler.run(null, null, null, sourceFile.getPath())); 
    } 
+0

...你爲什麼覺得需要這樣做? – Makoto

+0

這是一個替代方案,因爲我也寫在第一行的答案。它也在編譯一個java源文件。 –

+0

是的,我熟悉'JavaCompiler'。然而,這不是問題所在,也不是對這個特定問題真的有幫助。 – Makoto

相關問題