проблема пути к классам - PullRequest
       31

проблема пути к классам

0 голосов
/ 05 января 2010

Я пытаюсь скомпилировать класс сервлета в папке Tomcat webappps / Email / src / Mail , но получаю ошибки времени компиляции:

./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

Вот класс сервлетов:

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.

Может кто-нибудь сказать, почему вторая команда сработала не первая?

Ответы [ 3 ]

1 голос
/ 05 января 2010

Переменная CLASSPATH среды будет использоваться, когда вы не задаете путь к классу в командной строке с помощью -cp. Таким образом, предполагая, что ваши отсутствующие jar-файлы находятся в вашей переменной CLASSPATH (servlet.jar, mail.jar и т. Д.), Учитывая, что вы не указываете их в командной строке, вы получаете ошибку с указанным (не полностью указанным) указанным вручную путем к классам вы вводите -cp.

Если ничего другого, было бы неплохо добавить необходимые jar-файлы в командную строку, чтобы помочь понять, что нужно запустить вашей программе. После того, как вы добавите servlet.jar и mail.jar, я полагаю, вы получите несколько дополнительных ошибок для вещей, необходимых для mail.jar. Это полезно для понимания зависимостей.

1 голос
/ 05 января 2010

Первая версия будет игнорировать переменную среды CLASSPATH, так как вы используете -cp для явной установки classpath. Второй нет. Я полагаю, что ваш CLASSPATH содержит JavaMail, API сервлета и т. Д. Введите set classpath в командной строке, чтобы проверить это.

0 голосов
/ 05 января 2010

Одна заметка перед моим ответом: большинство людей не компилируют код Java, вызывая javac напрямую. Подумайте об использовании Ant или Maven2 с вашим проектом.

Я не понимаю, как или почему работает 2-я команда, и я удивлен, если она работает. Java-код для класса «mail» ссылается на API во внешних, не JDK-пакетах; Вы должны предоставить информацию о classpath для javac (используя опцию -cp), чтобы компилятор «связался» с этими библиотеками.

В вашей первой команде я подозреваю, что аргумент -cp, похоже, указывает на исходные файлы; эта опция должна указывать на каталоги с скомпилированными файлами классов и / или файлами .jar, которые содержат файлы классов.

Классы API JavaMail и классы javax.servlet обычно содержатся в файлах .jar. Я уверен, что у Tomcat есть хотя бы jar сервлета, и вы можете скачать JavaMail с java.sun.com .

...