2012-07-19 79 views
2

我正在寻找编译java文件的方法,我知道你可以使用javac Test.java从命令行编译Java文件,但有没有办法将此调用传递给命令行?使用命令行通过Java文件编译文件

还有一种方法让命令行以相同的方式编译.tar文件...像javac -tar Test.tar(从Java文件传递命令)..或者什么是最好的方式来做到这一点?

对不起我不是很擅长CMD命令

+1

在这里我要离开这个因为其他人已经发布正确答案:HTTP://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html – 2012-07-19 17:50:24

+0

我想将这些参数从java传递到命令提示符 – 2012-07-19 17:51:30

回答

3
Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec("javac Test.java"); 
3

您可以从Java中使用Runtime类,例如运行系统命令

Process p = Runtime.getRuntime().exec("javac Test.java"); 
p.waitFor(); 

BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line; 
while((line = reader.readLine()) != null) { 
    System.out.println(line); 
} 
+0

只是在这里玩弄它,只是想知道你可以把它放在一个方法中,并在你想要的时候调用它是否必须在主方法中? ...'public static void main(String [] args) – 2012-07-19 17:58:59

+0

它可以在一个方法中。 '公共无效执行(字符串命令)抛出异常{...}'那么你可以调用'execute('java Test.java')' – 2012-07-19 18:05:38

2

我相信你问的是如何将编译命令从java文件传递到命令行来编译另一个java文件。这可以像执行任何其他命令到命令行一样完成。在我看来,我使用流程构建器来处理所有事情,但是,这是使用.exec()并将命令行编译命令作为字符串传递的绝佳示例。

2

试试这个....

Process p = Runtime.getRuntime().exec("javac Test.java"); 
4

Java提供的interface从程序调用编译器。

JavaCompiler compiler = ToolProvider 
    .getSystemJavaCompiler(); 

StandardJavaFileManager fileManager = compiler 
    .getStandardFileManager(null, null, null); 

Iterable<? extends JavaFileObject> compilationUnits = fileManager 
    .getJavaFileObjectsFromStrings(Arrays.asList("MyClass.java")); 

compiler.getTask(null, fileManager, null, null, null, compilationUnits).call(); 

fileManager.close(); 
+0

我实际上正在寻找这种编译项目的方式,它似乎在编译,但是当您尝试编译具有多个类的项目,但它不能识别所有类(即调用另一个类的一个类),它正在编译所有类,但是针对其他类以及其他类的导入语句进行编译另一个班被称为......你知道为什么会发生这种情况吗? – 2012-07-20 08:04:55

+0

您可能必须设置[classpath](http://stackoverflow.com/questions/1563909/how-to-set-classpath-when-i-use-javax-tools-javacompiler-compile-the-source)选项。 – 2012-07-20 19:45:37

相关问题