从main函数进入执行编译java代码的方法与从servelet进入执行编译java代码的方法的区别

在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



根据报错信息,我认为是已经找到包了,但就是不能识别包里面的类,各位帮看看是不是这个问题
问题补充

flykete 写道
根据

D:\Administrator\workspace\a\Model2007082016080001.java:3: 找不到符号

符号: 类 AbstractPackedModel

位置: 软件包 com.tool.servelet

import com.tool.servelet.AbstractPackedModel;



可以知道在编译时,缺少环境变量,你加上-cp指定lib目录 试试




具体应该怎么加,我的开发平台是myeclipse
问题补充:
各位朋友帮帮忙,我已经搞了四天了,这个问题还没有解决,影响项目进度了。不管对不对,提提建议,谢谢!
问题补充:
回答 qpzmal :不太懂log当中的"找不到符号"是指什么(找不到符号是指找不到类,但是能找到这个类所在的包);现在已经能正确取得你的工程目录地址了么?(我把地址给写死了,如果用方法System.getProperty("user.dir")取,从main函数进去执行方法,取的路径是工程的路径,但是从servelet进去取的路径是tomcat下的bin路径);把Model2007082016080001这个类改成最简单的helloworld,看能不能编译(还不能编译),谢谢qpzmal

比如:
[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,看能不能编译,如果可以就是引用包的方法有问题;如果不是,可能就麻烦了