使用javac在另一个java类文件中编译一个包名为的java类
我试图使用javac命令在另一个java类文件中编译一个java类文件。如果这两个文件中没有任何包名,则运行良好 Laj类使用javac在另一个java类文件中编译一个包名为的java类,java,javac,Java,Javac,我试图使用javac命令在另一个java类文件中编译一个java类文件。如果这两个文件中没有任何包名,则运行良好 Laj类 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class Laj { private static void printLines(String name, InputStream ins) throws E
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");
}
}
我可以使用javaclaj.java和javalaj命令来编译和运行它们。但是,如果我在这两个类前面添加包名,例如package compileTest,并将Laj中代码的runProcess部分修改为
runProcess("javac -d . compileTest.simpleTest.java");
runProcess("java compileTest.simpleTest");
这个代码不起作用
有人能帮我吗,谢谢。为什么不使用“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()));
}
我没想到会这样;包是文件夹结构,而您的文件不在文件夹结构中,虽然不完全是重复的,但可以让您克服最初的痛苦。我认为您需要指定类路径。例如,使用“-cp”。如果这不起作用,请使用-cp参数……为什么您会觉得有必要这样做?正如我在回答的第一行中所写,这是一种替代方法。它也在编译java源文件。是的,我熟悉
JavaCompiler
。然而,这并不是问题所要问的,对于这个特定问题也没有真正的帮助。因此,您尝试将此作为编译java文件的第二种方法。我认为您一直在编译java文件,所以建议使用另一种解决方案。对此我很抱歉:)