Java 类路径问题
我试图在Tomcat的webappps/Email/src/Mail文件夹中编译Servlet类,但我遇到编译时错误:Java 类路径问题,java,servlets,classpath,Java,Servlets,Classpath,我试图在Tomcat的webappps/Email/src/Mail文件夹中编译Servlet类,但我遇到编译时错误: ./Email/src/Mail/Mail.java:7: package javax.mail does not exist import javax.servlet.http.*; ./Email/src/Mail/Mail.java:9:package javax.servlet does not exist import javax.servlet.*; ./
./Email/src/Mail/Mail.java:7: package javax.mail does not exist
import javax.servlet.http.*;
./Email/src/Mail/Mail.java:9:package javax.servlet does not exist
import javax.servlet.*;
./Email/src/Mail/Mail.java:12:cannot find symbol
symbol: class HttpServlet
public class mail extends HttpServlet{
^
./Email/src/Mail/Mail.java:14: cannot find symbol
symbol: class HttpServletRequest
location: class Mail.mail
public void doPost(HttpServletRequest request,HttpServletResponse response)
^
./Email/src/Mail/Mail.java:14: cannot find symbol
symbol: class HttpServletRequest
location: class Mail.mail
public void doPost(HttpServletRequest request,HttpServletResponse response)
^
./Email/src/Mail/Mail.java:20: cannot find symbol
symbol: class MessageReading
location: class Mail.mail
MessageReading mr=new MessageReading();
7 errors
我用来编译类的命令是:
C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps>javac -d ./Email/WEB-INF/classes -cp ./Email/src/Mail/. ./Email/src/Mail/mail.java
下面是servlet类:
package Mail;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import javax.servlet.http.*;
import javax.servlet.*;
import Mail.*;
public class mail extends HttpServlet{
public void doPost(HttpServletRequest request,HttpServletResponse response)
{
try{
MessageReading mr=new MessageReading();
}
catch (Throwable e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
}
}
}
当我试图使用以下命令编译它时,它正在正确编译:
C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps>javac -d ./Email/WEB-INF/classes ./Email/src/Mail/*.java
邮件文件夹中的MessageReading和mail类
有人能告诉我为什么第二个命令不起作用吗?第一个版本将忽略CLASSPATH环境变量,因为您使用-cp显式设置CLASSPATH。第二个没有。我设想您的类路径包含JavaMail、servlet API等。在命令行键入
设置类路径
,以验证这一点。如果您没有在命令行上用-cp指定类路径,则将使用环境类路径变量。因此,假设缺少的jar在类路径变量(servlet.jar、mail.jar等)中,假设您没有在命令行中指定它们,那么当您键入-cp时,您的(未完全指定的)手动指定的类路径会出错
如果没有其他问题,那么向命令行添加所需的jar将是一个很好的练习,以帮助理解程序需要运行什么。在添加servlet.jar和mail.jar之后,我相信对于mail.jar所需的内容,您会得到一些额外的错误。这有助于理解依赖关系 在我回答之前,请注意:大多数人不会直接调用javac来编译Java代码。考虑使用Ant或Mave2与您的项目。< /P> 我不明白第二个命令是如何工作的,也不明白为什么,如果它真的工作,我会感到惊讶。“mail”类的Java代码引用外部非JDK包中的API;您必须向javac提供类路径信息(使用-cp选项),以便编译器与这些库“链接” 在Your's 1st命令中,我怀疑-cp参数似乎指向源文件这一事实;此选项应指向包含已编译类文件和/或包含类文件的.jar文件的目录
JavaMail API类和javax.servlet类通常包含在.jar文件中。我确信Tomcat至少有servlet jar,您可以从下载JavaMail。啊,是的——Steve B.是对的;当未指定-cp时,将使用环境CLASSPATH变量。但是,我建议将计算机的类路径留空,因为这可能会导致后续问题(处理多个项目),难以在同事的计算机上调试或复制。实际上,我希望类路径头搜索邮件文件夹中的所有类,如MessageReading,在编译邮件类时不指定其名称。如果上面不起作用我怎么办?