需要动态编译的代码中import了第三方的jar
执行javac.compile(String[])方法时报“软件包 org.apache.axis.description 不存在”
但是此jar包已经在工程中被导入了
请教各位,如何使动态编译使用当前的运行环境的classpath呢?
执行javac.compile(String[])方法时报“软件包 org.apache.axis.description 不存在”
但是此jar包已经在工程中被导入了
请教各位,如何使动态编译使用当前的运行环境的classpath呢?
而是由程序自动生成的代码
通过调用“import com.sun.tools.javac.Main”类的compile方法进行动态编译
Class-Path:为相对路径的类库(.jar)位置,用空格分离注:第三方类库不在你自己打包里的情况下
javac.compile
有这个方法吗?只有
com.sun.tools.javac.Main.compile(String[])
这个方法StringBuilder classPath = new StringBuilder();
//定义编译时的路径
classPath.append("c:\\myclasss");
//定义编译时的lib
classPath.append(java.io.File.pathSeparatorChar).append("c:\\abc.jar");
//需要编译的java文件
File javaFile = new javaFile("c:\\Test.java");
//开始编译
String args[] = {"-cp", classPath.toString(), javaFile.getAbsolutePath()};
int rs = com.sun.tools.javac.Main.compile(args);
if (rs != 0) {
//编译发生错误!!
}
这里的args和手动执行javac的参数是一样的
例如:
javac -encoding GBK -classpath "c:\\myclass;c:\\abc.jar" Test.java
就等于
String args[] = {"-encoding", "GBK", "-classpath", "c:\\myclass;c:\\abc.jar", "Test.java"};
com.sun.tools.javac.Main.compile(args);
直接把调用方法的代码copy过来了
忘了前边定义的一句
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main()具体的情况写在下边的帖子里了,包括被编译的文件、编译的代码等等,麻烦大家帮忙看一下
http://community.csdn.net/Expert/topic/5140/5140236.xml?temp=.8748133