在tomcat用main执行代码
public static void main(String[] args) throws Exception {
compile();
}
private synchronized static File compile() throws Exception {
String[] args = new String[] { "-d", System.getProperty("user.dir") ,
System.getProperty("user.dir") + "\Model2007082016080001.java"};
System.out.println(System.getProperty("user.dir"));
int status = javac.compile(args);
System.out.println(status);
return null;
}
用上面的代码编译已经存在的java代码,java 代码用到的类包已经导进了工程,从main入口进入可以成功编译指定的java代码。
但是在tomcat下执行servelet,执行compile()方法,就会编译失败,报错:
D:\Administrator\workspace\a\Model2007082016080001.java:3: 找不到符号
符号: 类 AbstractPackedModel
位置: 软件包 com.tool.servelet
import com.tool.servelet.AbstractPackedModel;
不知道什么原因
问题补充
System.getProperty("user.dir") 执行main函数的时候他的值是当前的工程目录,但是在执行servelet是他的值是tomcat下的bin目录,我用System.setProperty ("user.dir", "D:\Administrator\workspace\a");它改成工程目录,运行还是报错。请大家帮忙!
问题补充
我把类 AbstractPackedModel类所在的包路径放到classpath中,还是不行
再看一次报错信息:
Source: D:\Administrator\workspace\a\Model2007082016080001.java
Message: D:\Administrator\workspace\a\Model2007082016080001.java:3: 找不到符号
符号: 类 AbstractPackedModel
位置: 软件包 com.tool.servelet
Code: compiler.err.cant.resolve
Kind: ERROR
Position: 146
Start Position: 146
End Position: 165
Source: D:\Administrator\workspace\a\Model2007082016080001.java
Message: D:\Administrator\workspace\a\Model2007082016080001.java:5: 找不到符号
符号: 类 AbstractPackedModel
com.tool.servelet.Model2007082016080001
根据报错信息,我认为是已经找到包了,但就是不能识别包里面的类,各位帮看看是不是这个问题
问题补充
比如:
[code="java"]String[] args = new String[] { "-d", System.getProperty("user.dir"), "-cp", "D:/WORKSPACE/SDK3.2_HEAD/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/webapps/iwoo/WEB-INF/classes", "Model2007082016080001.java"};[/code]
[code="java"]D:/WORKSPACE/SDK3.2_HEAD/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/webapps/iwoo/WEB-INF/classes[/code]
就是你的AbstractPackedModel所在的classes目录. 根据你的具体情况设置.
根据
D:\Administrator\workspace\a\Model2007082016080001.java:3: 找不到符号
符号: 类 AbstractPackedModel
位置: 软件包 com.tool.servelet
import com.tool.servelet.AbstractPackedModel;
可以知道在编译时,缺少环境变量,你加上-cp指定lib目录 试试
不太懂log当中的"找不到符号"是指什么,现在已经能正确取得你的工程目录地址了么?
谁引用了AbstractPackedModel这个类?Model2007082016080001么?如果是,把Model2007082016080001这个类改成最简单的helloworld,看能不能编译,如果可以就是引用包的方法有问题;如果不是,可能就麻烦了