Tra i file JAR in Eclipse (App Engine) progetto

Sono stato alla ricerca di una soluzione per questo problema per più ore di oggi e molte ore di ieri, così ho deciso di rivolgermi qui, anche se sembra uno stupido problema.

Situazione: ho un Google AppEngine impostazione di un progetto in Eclipse Java EE. È lì per più settimane tutto funziona bene, posso distribuire App Engine e test in Eclipse senza probs.

Ora ho bisogno di aggiungere pacchetti JAR per f.e. Supporto JSON e Google API di Visualizzazione.
Ho provato JSON una settimana fa e perché non è riuscito, ho appena scaricato il file di origine e aggiunti alla mia fonte.
Ma ora, con le Visualizzazioni cosa, sono troppo file di origine, quindi ho bisogno Vasetti di lavoro.

Quello che ho fatto:

  • scaricato il file JAR.
  • messo li in un PROGETTO cartella/lib.
  • selezionato e cliccato e cliccato Build Path > Aggiungi a costruire percorso.

Quello che è successo: Tutto è andato bene, ho potuto importare le classi e creare sottoclassi senza avere errori. Quindi è chiaro che Eclipse riconosciuto le classi di esistenza e Eclipse li aveva importati correttamente.

Poi ho provato a costruire (Modalità di Debug) e ottenuto il seguente errore (quella che ho avuto con JSON troppo):

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 com.google.appengine.tools.development.[email protected]{/,/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

Non so se il fatto che non stampa la classe con strappi e invece di fare punti è parte del problema: com/google/visualization/datasource/DataSourceServlet.
Nella seconda parte si fa uso di punti.

Ho guardato per un problema per un tempo molto lungo, e sentito cose su di classpath file. Il mio .classpath file simile a questo:

<?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>

Solo il war/WEB-INF/classes non esiste..

Ow, un’altra cosa: ho trovato documenti su App Engine in particolare e a volte hanno menzionato la war/WEB-INF/lib cartella, così ho provato a metterlo lì. Naturalmente, dopo l’eliminazione dal percorso di compilazione e lettura dopo lo spostamento. (È la versione del classpath file ho incollato).

Qualcuno ha un’idea di come questo può essere risolto?
Sommario: Eclipse riconosce importato Vasetti, ma costruire non riesce per qualche motivo…

EDIT: soluzione
Ho trovato il seguente:

  • Vasi devono essere in WEB-INF/lib
  • Vasi non devono essere in cartelle all’interno lib, tutti nella root del WEB-INF/lib cartella. Ho avuto miniera in una cartella separata e che non ha funzionato.
  • Ho Source > di Pulizia e di Source > Gestire le importazioni e ha funzionato.
InformationsquelleAutor Steven Roose | 2011-11-27



5 Replies
  1. 21

    Siete sulla strada giusta. Dal momento che l’applicazione quando viene distribuito in appengine è confezionato come una guerra (archivio di applicazioni web), biblioteca barattoli devono essere in WEB-INF/lib. È necessario assicurarsi che la vasetti ci sono e quindi aggiungere i vasetti di eclipse costruire percorso. Prova a fare una “pulizia” con il progetto e ri-costruzione di garantire le librerie si trova nel pacchetto.

    • Pulire il funzionamento? Come faccio a fare che? Im relativamente nuovo per Eclipse realtà. E la costruzione? Quando faccio clic su debug o pulsante esegui, il progetto è ri-costruire, no?
    • Posso da qualche parte qui ad aggiornare il post con la soluzione? Ho trovato i seguenti: – Vasi devono infatti essere in WEB-INF/lib – Vasetti non devono essere in cartelle all’interno lib, tutti nella root del WEB-INF/lib cartella. Ho avuto miniera in una cartella separata e che non ha funzionato. – Ho Source > di Pulizia e di Source > Gestire le importazioni e ha funzionato in seguito 🙂
    • A volte eclipse non riuscire a copiare vasetti di specificare nel percorso di generazione di WEB-INF/lib cartella. nel mio caso, di voci di libreria in ordine e di esportazione scheda di costruire percorso di impostazione ottenere deselezionata(non so perché) così ho controllate tutte e risolvere i problemi.
  2. 2

    Hai ancora bisogno di aggiungere i file jar di java build path, per evitare errori di compilazione dopo aver aggiunto i file al war/WEB-INF/lib cartella!

  3. 1

    Copia incolla l’ .file jar war/WEB-INF/lib e poi andare su Proprietà(di progetto in Eclipse) –> Java Build Path –> Add JARs –> Selezionare il relativo .le giare del progetto corrente. Si dovrebbe essere tutti insieme!

  4. 0

    Potrebbe essere “un po ‘” troppo tardi per questo, ma in eclipse non è necessario copiare manualmente.
    Fare Clic destro sul progetto -> Build Path -> Configure Build Path… -> selezionare la Distribuzione di Montaggio (a sinistra).
    Aggiungi il tuo vasetti qui e sarà incluso in caso di distribuzione.

Lascia un commento