2015-12-02 12 views
5

Sono un ingegnere alle prime armi con esperienza nella scrittura di PHP, python e ruby. Sto cercando di contribuire a un progetto scritto in clojure. Sto cercando di aggiungere una libreria al progetto, ma dopo aver aggiunto la libreria ed eseguito lein uberjar, sto ricevendo un errore. Vorrei sapere cosa significa e se è possibile consigliare un metodo per risolverlo. Grazie in anticipo per il vostro aiuto!L'aggiunta della dipendenza da clojure e l'esecuzione di lein uberjar causa java.lang.IllegalAccessError

Quello che sto cercando di realizzare Includere il uap-clj library nel mio progetto e compilare il progetto in un jarfile.

Cosa ho scritto Ho aggiunto la libreria come penultimo elemento nell'elenco delle dipendenze.

:dependencies [[lots-of-dependencies] 
       [uap-clj "1.1.1"] ; user agent parser 
       [another-dependency]] 

Quello che mi sono imbattuto in Lein According to the instructions on github, dopo aver salvato le mie modifiche al project.clj, corro lein deps poi lein clean && lein uberjar.

Che cosa è successo Dopo aver aggiornato e salvato il file, eseguendo il comando dà il seguente errore prima di un lungo stacktrace:

java.lang.IllegalAccessError: tried to access method clojure.lang.RT.classForNameNonLoading(Ljava/lang/String;)Ljava/lang/Class; from class clj_yaml.core$loading__5340__auto____29, compiling:(flexmaster.clj:1:1) 

Che altro ho cercato ho voluto verificare se avevo fatto un errore aggiungendo la libreria. Ho creato un nuovo progetto clojure da zero e ho creato un file jar utilizzando lein deps e poi lein uberjar. Successivamente, ho aggiunto uap-clj alle: dipendenze nel mio nuovo progetto, salvato project.clj ed eseguito e lein uberjar di nuovo. Sono riuscito a creare un file jar, quindi credo di aggiungere la libreria correttamente.

Non riesco a pensare ad un altro motivo per cui l'atto di includere un'altra dipendenza mi impedisca di creare il file jar. Se riesci a pensare a qualcosa che dovrei controllare in base alle informazioni che ho fornito, mi sarebbe di grande aiuto. Grazie!

risposta

4

Sembra che la libreria di riferimento dipenda da Clojure 1.7.0, ma si fa esplicitamente riferimento alla versione 1.6.0.

provare a cambiare:

[org.clojure/clojure "1.6.0"] 

a:

[org.clojure/clojure "1.7.0"] 

In alternativa, si potrebbe fare riferimento a un vecchia versione della libreria, che non dipende da Clojure 1.7.0, come: [uap-clj "1.0.1"]

+0

Grazie! Questo funziona assolutamente! Ora so di controllare sempre la versione. –

Problemi correlati