2

Web アプリケーションで使用するソース コードをコンパイルしようとしています。Ubuntu の機能は Windows の機能とは異なり、classpath永続的に設定するのはよくないので、フラグを一時的に設定することにしました。ターミナルでの私のコマンドは次のとおりです。

littlejavachild@ubuntu:~/LittleJavaChild/ServletProjects/beerV1$ javac -cp "/usr/share/tomcat7/servlet-api.jar" -d classes src/com/example/*.java

私が達成しようとしていることは次のとおりです。

  • .javaパッケージ内のすべてのファイルをコンパイルするcom.example
  • .classファイルを適切なディレクトリに直接送信する
  • クラスフォルダーをフォルダーにコピーしWEB-INFます
  • を設定してもclasspath、エラーが発生します:

    src/com/example/ListenerTester.java:3: error: package javax.servlet does not exist
    import javax.servlet.*;
    ^
    src/com/example/ListenerTester.java:4: error: package javax.servlet.http does not exist
    import javax.servlet.http.*;
    ^
    src/com/example/ListenerTester.java:7: error: cannot find symbol
    public class ListenerTester extends HttpServlet{
                                        ^
      symbol: class HttpServlet
    src/com/example/ListenerTester.java:8: error: cannot find symbol
        public void doGet(HttpServletRequest request,
                          ^
      symbol:   class HttpServletRequest
      location: class ListenerTester
    src/com/example/ListenerTester.java:9: error: cannot find symbol
                    HttpServletResponse response) throws IOException, ServletException {
                    ^
      symbol:   class HttpServletResponse
      location: class ListenerTester
    src/com/example/ListenerTester.java:9: error: cannot find symbol
                    HttpServletResponse response) throws IOException, ServletException {
                                                                      ^
      symbol:   class ServletException
      location: class ListenerTester
    src/com/example/MyServletContextListener.java:2: error: package javax.servlet does not exist
    import javax.servlet.*;
    ^
    src/com/example/MyServletContextListener.java:4: error: cannot find symbol
    public class MyServletContextListener implements ServletContextListener{
                                                     ^
      symbol: class ServletContextListener
    src/com/example/MyServletContextListener.java:5: error: cannot find symbol
        public void contextInitialized(ServletContextEvent event){
                                       ^
      symbol:   class ServletContextEvent
      location: class MyServletContextListener
    src/com/example/MyServletContextListener.java:12: error: cannot find symbol
        public void contextDestroyed(ServletContextEvent event){
                                     ^
      symbol:   class ServletContextEvent
      location: class MyServletContextListener
    src/com/example/ListenerTester.java:14: error: cannot find symbol
            Dog dog = (Dog) getServletContext().getAttribute("dog");
                            ^
      symbol:   method getServletContext()
      location: class ListenerTester
    src/com/example/MyServletContextListener.java:6: error: cannot find symbol
            ServletContext sc = event.getServletContext();
            ^
      symbol:   class ServletContext
      location: class MyServletContextListener  
    

    これらのエラーは、クラスパスが正しく設定されていない場合に発生することを知っています。これで私を助けてください。何が問題なのか、どのように修正すればよいのか、今後それを回避する方法を教えてください。

    -verbose で更新

    [クラスファイルの検索パス: /usr/lib/jvm/java-7-openjdk-i386/jre/lib/resources.jar,/usr/lib/jvm/java-7-openjdk-i386/jre/lib/rt .jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/sunrsasign.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/jsse.jar、/ usr/lib/jvm/java-7-openjdk-i386/jre/lib/jce.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/charsets.jar、/usr/lib/ jvm/java-7-openjdk-i386/jre/lib/netx.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/plugin.jar、/usr/lib/jvm/java- 7-openjdk-i386/jre/lib/rhino.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/jfr.jar、/usr/lib/jvm/java-7-openjdk- i386/jre/classes、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ext/localedata.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ ext/sunjce_provider.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ext/dnsns.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ ext/java-atk-wrapper.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ext/pulse-java.jar、/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ext/sunpkcs11. jar,/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ext/zipfs.jar,.,/usr/share/tomcat7/servlet-api.jar]

    4

    2 に答える 2

    4

    タスクを少しずつ分割して、最初に Java ファイルをコンパイルしてみましょう。後でクラス ファイルの移動方法を確認します。

    エラーは確かに、必要なクラスが見つからなかったことを示しているため、jar がクラスパスに正しく追加されていません。これをチェックして

    javac -classpath .:/usr/share/tomcat7/servlet-api.jar src/com/example/*.java
    

    指定された場所に jar が存在することを確認します。また、これを src フォルダーから実行して、パスを com/example/*.java として指定してみてください。

    于 2013-02-26T07:05:12.133 に答える
    2

    -classpathではなく、を使用してみ-cpます。javacのUbuntu man ページには、-cpオプションが示されていません。-verboseからより多くの出力を取得するために追加することもできますjavac

    注: 私の Mac での javac の実装は同意しませんが、私は ubuntu マシン atm ではありません。

    于 2013-02-26T07:06:58.777 に答える