मैं आज इस मुद्दे के लिए कई घंटों के लिए समाधान ढूंढ रहा हूं और कल कई घंटे इसलिए मैंने इसे यहां संबोधित करने का फैसला किया, हालांकि यह एक बेवकूफ मुद्दा लगता है।ग्रहण (ऐप इंजन) परियोजना में जेएआर फाइलों सहित
स्थिति: मेरे पास एक्लिप्स जावा ईई में Google AppEngine प्रोजेक्ट सेटअप है। यह कई हफ्तों के लिए है, सब कुछ ठीक चल रहा है, मैं ऐप इंजन पर तैनात कर सकता हूं और जांच के बिना एक्लिप्स में परीक्षण कर सकता हूं।
अब मुझे f.e. के लिए JAR पैकेज जोड़ने की आवश्यकता है। जेएसओएन समर्थन और Google विजुअलाइजेशन एपीआई। मैंने एक हफ्ते पहले JSON की कोशिश की और क्योंकि यह असफल रहा, मैंने अभी स्रोत फ़ाइलों को डाउनलोड किया और उन्हें अपने स्रोत में जोड़ा। लेकिन अब विजुअलाइजेशन चीज के साथ, यह बहुत अधिक स्रोत फाइलें हैं इसलिए मुझे काम करने वाले जारों की आवश्यकता है।
मैं क्या किया:
- जार फ़ाइलों को डाउनलोड।
- उन्हें एक प्रोजेक्ट/lib फ़ोल्डर में डाल दिया गया।
- ने उन्हें चुना और राइट-क्लिक किया और बिल्ड पथ> पथ बनाने के लिए जोड़ें पर क्लिक किया।
क्या हुआ: सभी ठीक हो गए, मैं कक्षाओं को आयात कर सकता था और त्रुटियों के बिना उनसे उप-वर्ग बना सकता था। तो यह स्पष्ट है कि ग्रहण ने कक्षाओं के अस्तित्व को पहचाना और ग्रहण ने उन्हें सफलतापूर्वक आयात किया था।
तो मैं यह (डीबग मोड) का निर्माण करने की कोशिश की और त्रुटि (एक मैं JSON के साथ भी मिल गया) निम्नलिखित है:
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed chartDataServlet: java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed c[email protected]727db937{/,/Volumes/Data/eclipse_workspace/kulStats/war}: java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed [email protected]: java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
Nov 27, 2011 11:57:48 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: Error starting handlers
java.lang.NoClassDefFoundError: com/google/visualization/datasource/DataSourceServlet
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.mortbay.util.Loader.loadClass(Loader.java:91)
at org.mortbay.util.Loader.loadClass(Loader.java:71)
at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:191)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
Caused by: java.lang.ClassNotFoundException: com.google.visualization.datasource.DataSourceServlet
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 com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 35 more
मैं अगर तथ्य यह है कि इसे बाहर वर्ग के साथ प्रिंट पता नहीं है बिंदुओं के बजाए slashed इस मुद्दे का हिस्सा है: com/google/visualization/datasource/DataSourceServlet
। दूसरे भाग में वह डॉट्स का उपयोग करता है।
मैंने एक समस्या को बहुत लंबा समय देखा, और क्लासपाथ फ़ाइल के बारे में बातें सुनीं। मेरे .classpath फ़ाइल इस तरह दिखता है:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" output="test-classes" path="test"/>
<classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER/App Engine (1)"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/lib/commons-lang-2.4.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/lib/opencsv-1.8.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/chart-datasource/visualization-datasource-1.1.1.jar"/>
<classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>
केवल war/WEB-INF/classes
मौजूद नहीं है ..
Ow, एक और बात: मैं App इंजन के बारे में दस्तावेजों विशेष रूप से पाया जाता है और वे कभी कभी war/WEB-INF/lib
फ़ोल्डर उल्लेख किया है, तो मैं करने की कोशिश की इसे वहां भी डाल देना। निश्चित रूप से आगे बढ़ने के बाद और कदम के बाद पढ़ने के बाद। (यह क्लासपाथ फ़ाइल का वह संस्करण है जिसे मैंने चिपकाया है)।
क्या किसी को पता है कि इसे कैसे हल किया जा सकता है? सारांश: ग्रहण आयातित जार पहचानता है, लेकिन निर्माण किसी कारण से विफल रहता है ...
संपादित करें:
- जार में होना चाहिए वेब-INF/lib : समाधान मैं निम्नलिखित पाया
- जेएआरएस lib में फ़ोल्डरों में नहीं होना चाहिए, सभी रूट वेब-आईएनएफ/lib फ़ोल्डर में। मेरे पास एक अलग फ़ोल्डर में था और यह काम नहीं किया।
- मैंने सोर्स> क्लीन अप और सोर्स> आयात प्रबंधित किया और यह काम किया।
स्वच्छ संचालन? मैं उसको कैसे करू? वास्तव में ग्रहण करने के लिए अपेक्षाकृत नया है। और इमारत? जब मैं डीबग या रन बटन पर क्लिक करता हूं, तो प्रोजेक्ट फिर से बना रहता है, नहीं? –
क्या मैं यहां समाधान के साथ पोस्ट अपडेट कर सकता हूं? मुझे निम्न मिला: - जेएआर वास्तव में वेब-आईएनएफ/lib में होना चाहिए - जेएआरएस को वेब के अंदर फ़ोल्डर्स में नहीं होना चाहिए, सभी रूट वेब-आईएनएफ/lib फ़ोल्डर में। मेरे पास एक अलग फ़ोल्डर में था और यह काम नहीं किया। - मैंने सोर्स> क्लीन अप और सोर्स> आयात प्रबंधित किया और बाद में काम किया :) –
कभी-कभी ग्रहण वेब-आईएनएफ/lib फ़ोल्डर के निर्माण पथ में निर्दिष्ट जार की प्रतिलिपि बनाने में विफल रहता है। मेरे मामले में, ऑर्डर के तहत लाइब्रेरी प्रविष्टियां और बिल्ड पथ सेटिंग के निर्यात टैब को अनचेक किया गया है (मुझे नहीं पता क्यों) इसलिए मैंने अभी उन्हें सभी की जांच की और समस्या हल हो गई। –