2012-06-13 6 views
10

Sto tentando di eseguire l'esempio DynamoDB fornito con l'SDK AWS per java. Lo faccio usando eclipse e ho aggiunto il file aws-java-sdk-1.3.2.jar al percorso di build del progetto. La compilazione ovviamente va bene, ma sto ottenendo un'eccezione di runtime denominata NoClassDefFoundError. So che significa che la classe era presente alla compilazione ma non è stata trovata in fase di esecuzione. Ho provato ad aggiungere il file jar alle variabili env - non ha aiutato. Ho anche controllato e non ci sono problemi nell'usare altri file jar esterni su altri progetti. Lo stesso problema su Windows e Linux.NoClassDefFoundError durante l'esecuzione di un programma utilizzando AWS SDK per java

aiutare qualcuno?

Grazie, ben.

dello stack:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
    at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.<clinit>(AmazonDynamoDBClient.java:62) 
    at AmazonDynamoDBSample.init(AmazonDynamoDBSample.java:62) 
    at AmazonDynamoDBSample.main(AmazonDynamoDBSample.java:67) 
+0

Invia la traccia dello stack, per favore? –

+1

hai aggiunto il file jar della libreria di apache commons? può essere trovato qui: http://commons.apache.org/logging/download_logging.cgi –

+1

Sì, anche codec e client HTTP. Tutto aggiunto al percorso di costruzione –

risposta

1

Sembra che la tua JAR AWS ha bisogno di alcuni vasi in più per attrezzo utilizzato, ma gli elementi non-AWS (come nel tuo caso la registrazione).

Se si è scaricato un distributore che contiene una directory "lib", si è in qualche modo configurato Eclipse per utilizzare il JAR AWS invece di tutti i JAR richiesti, inclusi AWS e probabilmente tutti i JAR nella directory "lib".

+0

lib aveva aws-java-sdk-1.3.2-sources.jar e aws-java-sdk-1.3.2-javadoc.jar in esso. Non sono rilevanti, giusto? ho anche ottenuto una directory chiamata di terze parti, questa conteneva un commons-logging-1.1.1.jar ed è anche nel percorso di compilazione ... –

+0

Hai ragione ad indovinare che i sorgenti e i javadoc non sono ciò di cui hai bisogno aggiungere. Il file commons-logging-1.1.1.jar di terze parti contiene la classe mancante che si cerca. Per inciso, puoi configurare la libreria AWS in "include source" e quindi collegare il file JAR "sources" se vuoi eseguire il debug nella libreria aws. –

+0

commons-logging-1.1.1.jar è già presente nel percorso di generazione. Ho anche trovato org/apache/commons/logging/LogFactory.class manualmente all'interno del barattolo. riesci a pensare a qualche ragione per cui la JVM non la troverebbe? –

12

All'interno della AWS-java-sdk-1.3.2 cartella troverete un'altra cartella denominata "di terze parti". Tutti i file di terze parti utilizzati da Amazon SDK si trovano all'interno di tale cartella, incluso Apache Common Logging. È necessario aggiungere i file richiesti al classpath insieme ai file jar SDK AWS.

+0

Potresti fornire un link web a quella "terza parte" magica? Nella dipendenza jar non esiste una cartella di questo tipo. – Cherry

+1

Omg ... Sto girando intorno a questo esatto problema per molto ... Le librerie di terze parti ... figlio di un ... – WernerCD