проблема при выполнении JAR, написанного с помощью ANT - PullRequest
1 голос
/ 17 сентября 2011

Я написал простое приложение hello world, использующее Spring и ANT-скрипт для генерации JAR-файла для приложения hello world. JAR генерируется, а классы компилируются правильно. Затем я скопировал JAR в папку tomcat webapps, запустил tomcat и загрузил страницу index.jsp. Когда я пытался перейти со страницы index.jsp, мой сервлет внутри JAR не распознавался. он выдает приведенное ниже исключение.

javax.servlet.ServletException: Wrapper cannot find servlet class my.hello.servlet.WelcomeServlet or a class it depends on
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Unknown Source)
root cause

java.lang.ClassNotFoundException: my.hello.servlet.WelcomeServlet
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Unknown Source)

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

моя структура каталогов

MyFirstApp
    |
     --WEB_INF
         |
          -- lib
              |
               -- all external jars and the jar containing the class files of my app
         |
          -- web.xml
     |
      -- index.jsp
     |
      -- welcome.jsp

мой build.xml

<project name="MyFirstApp" default="jar" basedir="..">  
    <property name="src" location="/shil/JAVA/Spring Workspace/myfirstapp1/src"/>
    <property name="build" location="build"/>
    <property name="lib" location="/shil/JAVA/Spring Workspace/myfirstapp1/WebContent/WEB-INF/lib"/>        
    <path id="classpath-example">   
        <fileset dir="${lib}" includes="*.jar"/>
    </path>     
    <target name="clean">
        <delete dir="${build}"/>
    </target>
    <target name="init" depends="clean">
        <echo>Creating the build directory</echo>
        <!---<mkdir dir="build/jar"/>
        <mkdir dir="build/my/hello"/>                   
        <mkdir dir="build/my/hello/servlet"/>-->    
        <mkdir dir="build/classes"/>    
    </target>
    <target name="compile" depends="init">
        <echo>compiling</echo>
        <!---<mkdir dir="build/classes"/>-->        
        <javac srcdir="${src}" destdir="build/classes"              includeantruntime="false">
            <classpath refid="classpath-example"/>
        </javac>
    </target>   
    <target name="jar" depends="compile">
        <echo>building the jar</echo>       
        <jar destfile="F:/shil/JAVA/Spring Workspace/myfirstapp1/ant/helloworld.jar"                            basedir="build"/>           
    </target>
    <target name="run" depends="jar">
        <echo>running the jar</echo>
        <java jar="F:/shil/JAVA/Spring Workspace/myfirstapp1/ant/helloworld.jar" fork="true"/>
    </target>
</project>

Я попытался создать JAR, используя Eclipse. Это также дает ошибки.

JAR creation failed. See details for additional information.
  Exported with compile warnings: myfirstapp1/src/my/hello/HelloWorldApp.java
  Could not find source file attribute for: 'F:\shil\JAVA\Spring Workspace\myfirstapp1\build\classes\my\hello\HelloWorldApp.class'
  Source name not found in a class file - exported all class files in myfirstapp1/build/classes/my/hello
  Resource is out of sync with the file system: '/myfirstapp1/build/classes/my/hello/HelloWorldApp.class'.
  Resource is out of sync with the file system: '/myfirstapp1/build/classes/my/hello/MyTime.class'.
  Resource is out of sync with the file system: '/myfirstapp1/build/classes/my/hello/SayHello.class'.
  Could not find source file attribute for: 'F:\shil\JAVA\Spring Workspace\myfirstapp1\build\classes\my\hello\servlet\HelloWorldServlet.class'
  Source name not found in a class file - exported all class files in myfirstapp1/build/classes/my/hello/servlet
  Resource is out of sync with the file system: '/myfirstapp1/build/classes/my/hello/servlet/HelloWorldServlet.class'.
  Resource is out of sync with the file system: '/myfirstapp1/build/classes/my/hello/servlet/WelcomeServlet.class'.

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

это структура банки.

helloworld.jar
     |
      -- META-INF
            |
             -- MANIFEST.MF
     |
      -- my
          |
           -- hello
                |
                 -- HelloWorldApp.class 
                |
                 -- MyTime.class
                |
                 -- SayHello.class
                |
                 -- servlet
                       |
                        -- HelloWorldServlet.class
                       | 
                        -- WelcomeServlet.class

Ответы [ 2 ]

0 голосов
/ 17 сентября 2011

Пожалуйста, попробуйте также удалить папки внутри {tomcat_home} / рабочей папки, прежде чем перезапустить tomcat.

0 голосов
/ 17 сентября 2011

В вашей цели jar попробуйте basedir="build/classes" вместо "build", чтобы она соответствовала destdir в цели compile.

Похоже, что JAR создаетсяиз одного каталога выше, где это должно быть, поэтому внутренние пути к классам неверны и загрузчик классов не может их найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...