2011-11-27 9 views
17

मैं आज इस मुद्दे के लिए कई घंटों के लिए समाधान ढूंढ रहा हूं और कल कई घंटे इसलिए मैंने इसे यहां संबोधित करने का फैसला किया, हालांकि यह एक बेवकूफ मुद्दा लगता है।ग्रहण (ऐप इंजन) परियोजना में जेएआर फाइलों सहित

स्थिति: मेरे पास एक्लिप्स जावा ईई में 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 फ़ोल्डर में। मेरे पास एक अलग फ़ोल्डर में था और यह काम नहीं किया।
  • मैंने सोर्स> क्लीन अप और सोर्स> आयात प्रबंधित किया और यह काम किया।

उत्तर

21

आप सही रास्ते पर हैं।चूंकि एपेंगिन पर तैनात ऐप को युद्ध (वेब ​​एप्लिकेशन आर्काइव) के रूप में पैक किया जाता है, इसलिए लाइब्रेरी जार को वेब-आईएनएफ/lib में होना आवश्यक है। आपको यह सुनिश्चित करना चाहिए कि आपके जार वहां हैं और फिर उन जार को अपने ग्रहण पथ में जोड़ें। परियोजना पर "साफ" ऑपरेशन करने का प्रयास करें और पुस्तकालयों को पैकेज में सुनिश्चित करने के लिए इसे फिर से बनाएं।

+0

स्वच्छ संचालन? मैं उसको कैसे करू? वास्तव में ग्रहण करने के लिए अपेक्षाकृत नया है। और इमारत? जब मैं डीबग या रन बटन पर क्लिक करता हूं, तो प्रोजेक्ट फिर से बना रहता है, नहीं? –

+1

क्या मैं यहां समाधान के साथ पोस्ट अपडेट कर सकता हूं? मुझे निम्न मिला: - जेएआर वास्तव में वेब-आईएनएफ/lib में होना चाहिए - जेएआरएस को वेब के अंदर फ़ोल्डर्स में नहीं होना चाहिए, सभी रूट वेब-आईएनएफ/lib फ़ोल्डर में। मेरे पास एक अलग फ़ोल्डर में था और यह काम नहीं किया। - मैंने सोर्स> क्लीन अप और सोर्स> आयात प्रबंधित किया और बाद में काम किया :) –

+0

कभी-कभी ग्रहण वेब-आईएनएफ/lib फ़ोल्डर के निर्माण पथ में निर्दिष्ट जार की प्रतिलिपि बनाने में विफल रहता है। मेरे मामले में, ऑर्डर के तहत लाइब्रेरी प्रविष्टियां और बिल्ड पथ सेटिंग के निर्यात टैब को अनचेक किया गया है (मुझे नहीं पता क्यों) इसलिए मैंने अभी उन्हें सभी की जांच की और समस्या हल हो गई। –

4

इस समाधान है कि:

  • प्रतिलिपि स्रोत (.jar फ़ाइल) युद्ध/वेब-INF/lib फ़ोल्डर में
2

आप अभी भी करने के लिए जावा का निर्माण पथ के लिए जार फ़ाइलों को जोड़ने की आवश्यकता युद्ध/वेब-आईएनएफ/lib फ़ोल्डर में फ़ाइलों को जोड़ने के बाद संकलन त्रुटियों से बचें!

1

.jar फ़ाइलों को युद्ध/वेब-आईएनएफ/lib में पेस्ट करें और फिर गुणों (ग्रहण में प्रोजेक्ट के) पर जाएं -> जावा बिल्ड पथ -> जेएआर जोड़ें -> संबंधित .jars से चुनें वर्तमान परियोजना। आपको पूरा सेट होना चाहिए!

0

इसके लिए बहुत देर हो चुकी है, लेकिन ग्रहण में आपको मैन्युअल रूप से कॉपी करने की आवश्यकता नहीं है। प्रोजेक्ट पर राइट-क्लिक करें -> पथ बनाएं -> बिल्ड पथ कॉन्फ़िगर करें ... -> परिनियोजन असेंबली (बाएं) का चयन करें। यहां अपने जार जोड़ें और तैनात करते समय उन्हें शामिल किया जाएगा।

संबंधित मुद्दे