Je tente d'utiliser clojure pour mettre en œuvre un « plugin » pour un fournisseur logiciel fourni.problème clojure rmi classpath
est ici un peu de fond sur le fournisseur de logiciel fourni. Il m'attend à mettre en œuvre une interface particulière, puis mettre le fichier jar contenant cette implémentation dans un répertoire sur son serveur. Ensuite, lorsqu'un client utilise le logiciel, ma classe mis en œuvre se « envoyé » au client à partir du serveur via RMI et ma mise en œuvre de l'interface fonctionne sur le client. Le client n'a pas mon fichier jar (ou le fichier clojure jar) dans son classpath. Seul le serveur a ces fichiers jar. RMI semble être assez intelligent pour télécharger quoi que ce soit dépendances sont nécessaires.
J'ai réussi construit en Clojure et il semble fonctionner une mise en œuvre très simple. Le problème est, je voudrais être en mesure de mettre à jour mon implémentation sur le client à la volée. J'ai intégré un repl-server dans ma classe et je peux me connecter avec succès. Juste pour être clair, le repl-server est en cours d'exécution sur le client et je suis en mesure de se connecter à la repl obtenir une invite "clojure.core =>". Cependant, le repl semble être assez paralysé. Si j'entre (+ 1 1) j'obtiens l'erreur suivante: "java.lang.ClassNotFoundException: clojure.lang.Numbers". Si entrez (str "kent") je reçois "java.lang.NoClassDefFoundError: clojure/lang/ AFunction". La plupart des choses que j'entreprends produisent quelque chose de similaire. Je peux cependant faire un def simple tel que (def x 3) et x est défini donc le REPL semble fonctionner dans un certain sens.
Il semble que cela pourrait être un problème de classpath, mais je ne sais pas pourquoi mon « compilé » code, en cours d'exécution sur le client ne serait pas un problème classpath alors que le rempl, en cours d'exécution sur le même client ne peut pas trouver core classes.
Des idées?
Merci. Kent.