2014-09-21 1 views
0

Je l'exportation d'un projet à un pot qui est utilisé comme une extension de serveur dans SmartFox, mon projet utilise Amazon AWS SDK pour télécharger des fichiers vers le nuage. Le problème est que quand je lance le SmartFox il jette cette exception:AWS SDK NoClassDefFoundError en pot utilisé comme une extension de smartfox

Exception in thread "Thread-22" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials at... 
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 1 more 

La classe AWSCredentials est dans le classpath, quand j'ai téléchargé les fichiers SDK je remarque qu'il y avait un dossier « tiers » avec des pots qui l'AWS peut avoir besoin, je ne savais pas si je devais les ajouter au classpath, donc je l'ai fait, mais rien n'a changé .. aussi mon projet est un projet java régulier, pas un projet web, pourrait-il être le problème? Si c'est le cas je suis foutu parce que je ne suis pas autorisé à changer le type de projet .. Merci pour toute aide à l'avance ...

+0

Pouvez-vous donner plus de détails au sujet de votre environnement de développement? Comment construisez-vous le projet dans un pot? Incluez-vous le pot de base AWS lors de la construction? Ma première supposition est que AWS SDK n'est pas intégré dans le nouveau pot que vous faites. Je ne sais rien à propos de SmartFox, mais il semble que vous pourriez soit construire le pot dans votre nouveau pot, ou simplement utiliser SmartFox avec le pot AWS aussi bien –

Répondre

0

La réponse était assez facile, SmartFox a un répertoire /SmartFoxServer_2X/SFS2X/extensions/__ lib __ où vous êtes censé Mettez tous les pots dont votre pot d'extension peut avoir besoin.

Je collais tous les pots « tiers » et le pot SDK lui-même dans ce répertoire et presque travaillé. Le problème que je faisais face à la suite était une incompatibilité entre deux pots de la même bibliothèque (http-client de apache), l'un résidant à __ lib __ et l'autre résidant à /SmartFoxServer_2X/SFS2X/lib qui contient tous les pots que SmartFox utilise. Je pense que le problème était que le classloader SmartFox chargeait les fichiers http du client .class du fichier jar situé au /SmartFoxServer_2X/SFS2X/lib dont la version était un peu plus ancienne que celle que j'avais collée des bibliothèques tierces Amazon et que je n'avais pas deux méthodes dont AWS avait besoin. Quoi qu'il en soit, j'ai mis à jour SmartFox à la dernière version et cela a fait l'affaire. De Je pourrais aussi bien sûr avoir collé le pot à partir du dossier __ lib __ à lib d'avoir la même version.