चींटी, टॉमकैट बिल्ड त्रुटि: java.lang.NoClassDefFoundError: org/apache/tomcat/use/buf/B2CConverter




ant spring-mvc (13)

Build.xml फ़ाइल में "सूची" लक्ष्य को परिभाषित करते समय यूआरएल को बदलने के बजाए प्रबंधक यूआरएल को बनाने के लिए सभी चींटी कमांड को build.properties फ़ाइल में बदला जा सकता है।

tomcat.manager.url=http://localhost:8080/manager/text

टॉमकैट संस्करण: 7.0.20

मैं निम्नलिखित स्प्रिंग एमवीसी ट्यूटोरियल के माध्यम से अपना रास्ता काम करने का प्रयास कर रहा हूं: http://static.springsource.org/docs/Spring-MVC-step-by-step/part1.html

इस ट्यूटोरियल में, प्रबंधक का उपयोग कर टोमकैट पर तैनात करने के लिए एक चींटी बिल्ड स्क्रिप्ट सेटअप है। हालांकि, जब मैं किसी भी टोमकैट कार्यों को चलाने की कोशिश करता हूं तो मैं कुछ समस्याओं में भाग लेता हूं।

सबसे पहले, ट्यूटोरियल में, वे अभी भी org.apache.catalina.ant.InstallTask उपयोग करते हैं जो बहिष्कृत है, इसलिए मैं org.apache.catalina.ant.DeployTask बदल गया।

अब समस्या यह है कि जब टोमकैट कार्यों को चलाने की कोशिश की जाती है तो मुझे मिलता है:

java.lang.NoClassDefFoundError: org/apache/tomcat/util/buf/B2CConverter
    at org.apache.catalina.util.Base64.encode(Base64.java:177)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:204)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:150)
    at org.apache.catalina.ant.ReloadTask.execute(ReloadTask.java:45)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.Main.runBuild(Main.java:809)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
 Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.buf.B2CConverter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 21 more

इसलिए मैंने थोड़ा सा tomcat-utils.jar और कुछ जानकारी मिली कि यह बताता है कि tomcat-utils.jar कक्षा पथ में होना चाहिए, इसलिए मैंने फाइललेट में कैटलिना-एंटी.जर के साथ जोड़ा लेकिन स्पष्ट रूप से org.apache.tomcat.util.buf org.apache.tomcat.util.buf.B2CConverter कक्षा वहां नहीं है।

तो अगली बार मैंने jar -tf साथ jar -tf जांच शुरू कर दी jar -tf यह पता चल सके कि क्या कोई वर्ग है। मुझे पता चला कि tomcat-coyote.jar कक्षा थी। फाइलसेट में इसे शामिल करने के साथ भी, समस्या हल नहीं होती है।

क्या किसी के पास कोई विचार है?


मेरे लिए कोई दूसरा जवाब काम नहीं करता है। इसके बजाय मैंने TOMCAT_HOME / lib / catalina-ant.jar, TOMCAT_HOME / lib / tomcat-coyote.jar, TOMCAT_HOME / lib / tomcat-util.jar और TOMCAT_HOME / bin / tomcat-juli.jar को ANT_HOME / lib निर्देशिका में कॉपी किया।

ऐसा लगता है कि क्लासपाथ्रफ़ में इन फ़ाइलों को ठीक से शामिल नहीं किया गया है।


तीन चीज़ें-

  • यदि कैटालिना-चींटी-क्लासपाथ के लिए टॉमकैट 7.x बदलें फाइलसेट का उपयोग करना है

    <path id="catalina-ant-classpath">
        <!-- We need the Catalina jars for Tomcat -->
        <!--  * for other app servers - check the docs -->
        <fileset dir="${appserver.lib}">
            <include name="catalina-ant.jar"/>
        <include name="tomcat-coyote.jar"/>
        <include name="tomcat-util.jar"/>
      </fileset>
      <fileset dir="${appserver.home}/bin">
        <include name="tomcat-juli.jar"/>
      </fileset>        
    

  • उपयोगकर्ता को प्रबंधक-स्क्रिप्ट के रूप में उपयोगकर्ता अनुमति देने के लिए tomcat-users.xml में उपयोगकर्ता को बदलें

  • Tomcat.manager.url प्रॉपर्टी को http://localhost:8080/manager/text बदलें

मैं पिछले उत्तरों में मामूली संशोधन का सुझाव दूंगा।

किसी उपयोगकर्ता को कॉन्फ़िगर करने के लिए प्रबंधक-gui और प्रबंधक-स्क्रिप्ट भूमिकाएं टॉमकैट 7 दस्तावेज़ 1 में दृढ़ता से निराश होती हैं। यह आपकी साइट को सीएसआरएफ हमलों के लिए खुला छोड़ सकता है।

प्रत्येक भूमिका के लिए अलग-अलग पासवर्ड के साथ अलग-अलग उपयोगकर्ताओं को परिभाषित करना सुरक्षित होगा:

<role rolename="manager-"/>
<role rolename="manager-script"/>
<user username="admin-gui" password="s3cret1" roles="manager-gui"/>
<user username="admin-script" password="s3cret2" roles="manager-script"/>

आम तौर पर, आपको केवल GUI उपयोगकर्ता के लिए उपयोगकर्ता नाम और पासवर्ड याद रखना होगा, इसलिए सुरक्षित कॉन्फ़िगरेशन होने का कोई बोझ नहीं है।



मुझे क्लासपाथ को बदलकर यह काम मिल गया

<path id="catalina-ant-classpath">
    <!-- We need the Catalina jars for Tomcat -->
    <!--  * for other app servers - check the docs --> 
    <fileset dir="${appserver.lib}">
        <include name="catalina-ant.jar"/>
        <include name="tomcat-coyote.jar"/>
        <include name="tomcat-util.jar"/>
    </fileset>
    <fileset dir="${appserver.home}/bin">
                <include name="tomcat-juli.jar"/>
    </fileset>
</path>

मुझे यकीन नहीं है कि यह क्यों हो रहा है, लेकिन यहां एक कामकाज है: http://www.coderanch.com/t/553582/Tomcat/java-lang-NoClassDefFoundError-org-apache

मैं समाधान ढूंढ रहा हूं, एक बार जब मैं इसे प्राप्त करता हूं तो मैं इसे यहां पोस्ट करना न भूलने की कोशिश करूंगा।

मैं opensuse का उपयोग करें।


तीन चीज़ें-

यदि कैटालिना-चींटी-क्लासपाथ के लिए टॉमकैट 7.x बदलें फाइलसेट का उपयोग करना है

    <path id="catalina-ant-classpath">
    <fileset dir="${appserver.lib}">
        <include name="catalina-ant.jar"/>
    <include name="tomcat-coyote.jar"/>
    <include name="tomcat-util.jar"/>
  </fileset>
  <fileset dir="${appserver.home}/bin">
    <include name="tomcat-juli.jar"/>
  </fileset> 
</path> 

उपयोगकर्ता को प्रबंधक-स्क्रिप्ट के रूप में उपयोगकर्ता अनुमति देने के लिए tomcat-users.xml में उपयोगकर्ता को बदलें

Tomcat.manager.url प्रॉपर्टी को http://localhost:8080/manager/text बदलें


जेसन की तरह, मैंने ऐडन के जवाब की कोशिश की और यह काम नहीं किया। टॉमकैट 7 के साथ प्रबंधक इंटरफ़ेस थोड़ा बदल गया है। यूआरएल में / प्रबंधक / सूची का उपयोग करने के बजाय आपको / प्रबंधक / टेक्स्ट / सूची का उपयोग करना होगा। इसलिए मैंने सूची कार्य को build.xml में निम्न में बदल दिया:

<target name="list" description="List Tomcat applications">
    <list url="${tomcat.manager.url}/text"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"/>
</target>

मुझे अपने व्यवस्थापक उपयोगकर्ता को "प्रबंधक-स्क्रिप्ट" भूमिका भी जोड़नी पड़ी ताकि इस ऑपरेशन के लिए उचित विशेषाधिकार हों:

  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="admin" password="admin" roles="manager-gui,manager-script"/>

यह मेरे लिए काम करना प्रतीत होता था (टॉमकैट 7.0.21, ओएस एक्स):

<path id="catalina-ant-classpath">
  <fileset dir="${tomcat_dir}/lib">
    <include name="catalina-ant.jar"/>
    <include name="tomcat-coyote.jar"/>
    <include name="tomcat-util.jar"/>
  </fileset>
  <fileset dir="${tomcat_dir}/bin">
    <include name="tomcat-juli.jar"/>
  </fileset>
</path>
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="list" classname="org.apache.catalina.ant.ListTask" classpathref="catalina-ant-classpath"/>

मै मैक ओएस एक्स पर हूं। यह मेरे लिए काम करता है:

<!-- ============================================================== -->
<!-- Tomcat tasks - remove these if you don't have Tomcat installed -->
<!-- ============================================================== -->

    <path id="catalina-ant-classpath">
        <!-- We need the Catalina jars for Tomcat -->
        <!--  * for other app servers - check the docs -->
        <fileset dir="${appserver.lib}">
            <include name="catalina-ant.jar"/>
        <include name="tomcat-coyote.jar"/>
        <include name="tomcat-util.jar"/>
      </fileset>
      <fileset dir="${appserver.home}/bin">
        <include name="tomcat-juli.jar"/>
      </fileset>        
    </path>

परिवर्तनों के ऊपर और "चींटी सूची" चलाने के बाद, मुझे त्रुटि मिली, java.io.FileNotFoundException: .... / manager / text / list "। इसे अपनी स्थापना निर्देशिका से टोमकैट शुरू करके हल किया गया था और शुरू करने के लिए ग्रहण का उपयोग नहीं किया गया यह। टोमकैट शुरू करने के बाद, पहले ब्राउजर में "लोकलहोस्ट: 8080" आज़माएं। इसे टॉमकैट पेज प्रदर्शित करना चाहिए। फिर "चींटी सूची" चलाने का प्रयास करें। यह काम करता है और ऊपर की समस्या हल हो जाती है।


मेरे लिए क्या काम करता है चार जार फ़ाइलों को निर्माण पथ में जोड़ रहा था

चलाएं -> रन कॉन्फ़िगरेशन -> आपको प्रोग्राम चुनें, दाईं ओर क्लासपाथ टैब का चयन करें, उपयोगकर्ता प्रविष्टियों पर क्लिक करें, फिर tomcat निर्देशिका से बाहरी 4 जार जोड़ें

इसके बाद मेरा build.xml पहले की तरह चलता है