2012-01-19 12 views
5

मैं टॉमकैट 6.0.24 से 7.0.23 तक अपग्रेड करने की प्रक्रिया में हूं। मेरे पास एक मेवेन 2.2.1 प्रोजेक्ट है जो जेएसपीसी मेवेन प्लगइन का उपयोग कर जेएसपी का प्रीकंपाइल करता है।टॉमकैट 7 पर जेएसपी नोक्लास डीफफाउंड एरर के साथ विफल रहता है: लॉर्ग/अपाचे/एनोटेशन प्रोसेसर

जब मैं अपने अनुप्रयोग के लिए युद्ध फ़ाइल नियोजित करने, और एक JSP यात्रा करने के लिए प्रयास करते हैं, मैं निम्न त्रुटि:

javax.servlet.ServletException: Error instantiating servlet class org.apache.jsp.my_jsp 
... 
root cause: 
java.lang.NoClassDefFoundError: Lorg/apache/AnnotationProcessor; 
    java.lang.Class.getDeclaredFields0(Native Method) 
    java.lang.Class.privateGetDeclaredFields(Class.java:2291) 
    java.lang.Class.getDeclaredFields(Class.java:1743) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
... 

मैं this blog post से पोम का एक टुकड़ा उधार लेने की कोशिश की है के साथ काम करने के लिए jspc टॉमकैट 7, लेकिन इसने समस्या को ठीक नहीं किया है। मैं इस मुद्दे को कैसे संबोधित कर सकता हूं? सही दिशा में किसी भी पॉइंटर्स की सराहना की जाएगी।

उत्तर

5

यह पता चला है कि मेरे पास एक उप-निर्देशिका पीओएम फ़ाइल (myproject-war/pom.xml) में जेएसपीसी प्लगइन का एक और संदर्भ था। /pom.xml और myproject-war/pom.xml दोनों में इसे ठीक करने से समस्या को हल करने के लिए पर्याप्त था। यहाँ अद्यतन पोम टुकड़ा मैं प्रयोग किया जाता है:

 <plugin> 
      <groupId>org.codehaus.mojo.jspc</groupId> 
      <artifactId>jspc-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>jspc</id> 
        <phase>compile</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <inputWebXml>${basedir}/target/web.xml</inputWebXml> 
       <packageName>org.apache.jsp</packageName> 
       <source>1.5</source> 
       <target>1.5</target> 
       <trimSpaces>false</trimSpaces> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>com.csc.aims</groupId> 
        <artifactId>aims-jar</artifactId> 
        <version>${project.version}</version> 
        <classifier>${env}</classifier> 
       </dependency> 
       <!-- 
        Hack the jspc plugin, which only supports Tomcat 6, to work for Tomcat 7. See: 
        http://hasini-gunasinghe.blogspot.com/2011/09/how-to-use-pre-compiled-jsps-in-webapp.html 
       --> 
       <dependency> 
        <groupId>org.codehaus.mojo.jspc</groupId> 
        <artifactId>jspc-compiler-tomcat6</artifactId> 
        <version>2.0-alpha-3</version> 

        <exclusions> 
         <exclusion> 
          <groupId>org.apache.tomcat</groupId> 
          <artifactId>jasper</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.apache.tomcat</groupId> 
          <artifactId>jasper-el</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.apache.tomcat</groupId> 
          <artifactId>jasper-jdt</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.apache.tomcat</groupId> 
          <artifactId>servlet-api</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.apache.tomcat</groupId> 
          <artifactId>jsp-api</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.apache.tomcat</groupId> 
          <artifactId>el-api</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.apache.tomcat</groupId> 
          <artifactId>annotations-api</artifactId> 
         </exclusion> 
        </exclusions> 
       </dependency> 

       <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-jasper</artifactId> 
        <version>${tomcat.version}</version> 
       </dependency> 

       <dependency> 
        <groupId>org.eclipse.jdt.core.compiler</groupId> 
        <artifactId>ecj</artifactId> 
        <version>3.5.1</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

इसके अलावा, मैं अद्यतन करने के लिए के बाद से प्रत्येक बिलाव निर्भरता के artifactId नए संस्करण में बदल गया है मेरा बिल्ला, निर्भरता प्रदान की थी, पूर्व:

   <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-jasper</artifactId> 
        <version>${tomcat.version}</version> 
        <scope>provided</scope> 
       </dependency> 

के बजाय:

   <dependency> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>jasper</artifactId> 
        <version>${tomcat.version}</version> 
        <scope>provided</scope> 
       </dependency> 

(नोट: tomcat.version अपने मुख्य पोम में परिभाषित संपत्ति है):

<properties> 
    ... 
    <tomcat.version>7.0.23</tomcat.version> 
    ... 
</properties> 
+0

शायद मुझे यह नहीं मिला है, लेकिन आपके वर्ग पथ में टॉमकैट-जैस्पर और जेएसपीसी प्लगइन में बहिष्करण का क्या उद्देश्य है? – Zarathustra

0

ऐसा लगता है कि आप अपने क्लासपाथ में आवश्यक जार शामिल नहीं हैं।

http://www.jarfinder.com/index.php/java/info/org.apache.AnnotationProcessor

लिंक दिखाती है कि कौन जार फ़ाइल से ऊपर उस में वर्ग है और मैं इसे कर रही है Catalina -6 * .jar तो मैं अनुमान लगा रहा हूँ यह निकाल दिया जाता है/पदावनत/बिल्ला में अद्यतन 7.

आप इस जार फ़ाइल को अपने क्लासपाथ में शामिल करने का प्रयास कर सकते हैं (जो एक ही समय में एक अच्छा विचार नहीं है) क्योंकि यह अन्य संघर्ष पैदा कर सकता है या आपके ऐप्स पोर्टेबिलिटी को प्रभावित कर सकता है।

+0

मैं मानता हूँ की जरूरत नहीं है, यह एक रोकने के अंतराल के दृष्टिकोण के रूप में समस्या का समाधान हो सकता है बिलाव 6 से पुस्तकालय फ़ाइलों सहित की तरह लगता है; लेकिन, मैं उस कोर्स को तब तक नहीं लेना चाहता जब तक कि मुझे कोई अन्य समाधान न मिल जाए। मैं टॉमकैट 7 के लिए जेएसपी संकलित करने के "सही" तरीके को समझना चाहता हूं ... मान लीजिए कि समस्या का स्रोत है। – RMorrisey

1

मैं एक ही समस्या थी क्योंकि EvalTag.jar आवश्यक org.apache.nnotationProcessor

मेरा सरल फ़िक्स सीधे मेरे आवेदक में इंटरफ़ेस को फिर से बनाना था आयन। इस तरह मैं बिल्ला के सभी jasper.jar 6.

package org.apache; 
import java.lang.reflect.InvocationTargetException; 
import javax.naming.NamingException; 

public interface AnnotationProcessor { 
    public void postConstruct(Object instance) throws IllegalAccessException, InvocationTargetException; 
    public void preDestroy(Object instance) throws IllegalAccessException, InvocationTargetException; 
    public void processAnnotations(Object instance) throws IllegalAccessException, InvocationTargetException, NamingException; 
} 
संबंधित मुद्दे