2016-02-07 12 views
7

Ho bisogno di condividere uno spazio dei nomi tra il mio Clojure (Garden) e il mio ClojureScript (Reagent).Clojure che non richiede un file cljc

Attualmente la cartella del progetto appare così:

src/ 
    clj/ 
    name/ 
     css.clj 
    cljs/ 
    name/ 
     core.cljs 
    cljc/ 
    name/ 
     config.cljc 

Il file config.cljc ha il seguente spazio: (ns name.config).

Ho provato a fare riferimento a questo spazio dei nomi dall'interno di clj/name/css.clj con un requisito.

(ns name.css 
    (:require [name.config :as config])) 

Tuttavia, questo genera un errore di compilazione da Garden.

Causato da: java.io.FileNotFoundException: Impossibile trovare nome/config__init.class o nome/config.clj su classpath.

Immagino che non stia nemmeno controllando i file cljc.

ho aggiunto "src/cljc" al :source-paths vettore in project.clj e :garden :builds ma ottengo lo stesso errore anche dopo il riavvio dei processi di build.

Vedo questo comportamento su Clojure 1.7.0 e 1.8.0.

Potrebbe anche essere utile ricordare che funziona senza problemi in ClojureScript (con Figwheel che gestisce la build). Posso richiedere e utilizzare il nuovo spazio dei nomi senza problemi.

Sembra che mi manchi mancare qualcosa di veramente semplice, perché nessuna documentazione intorno ai file .cljc menziona anche la richiesta.

risposta

5

Controlla se stai utilizzando Clojure 1.7 o successivo nel tuo project.clj. Questo messaggio di errore:

Causato da: java.io.FileNotFoundException: Impossibile individuare il nome/config__init.class o il nome/config.clj sul classpath.

indica che si sta utilizzando Clojure 1.6 o al di sotto, come quelle versioni di Clojure conoscono solo per cercare .class o .clj file.

+1

'project.clj' ha' org.clojure/clojure' in '" 1.7.0 "' e quando avvio un REPL conferma 'Clojure 1.7.0'. Qualcos'altro che deve essere impostato in 'project.clj'? –

+1

Ho lo stesso problema quando uso anche la 1.8.0. –

+0

Quale versione di Leinigen stai usando? Potresti provare uno più recente se esiste. –

0

Ho ricevuto lo stesso errore quando ho spostato un file da .clj a .cljc nel mio progetto. Ho fatto lein clean ma quello non ha avuto effetto. Alla fine ho rinominato lo spazio dei nomi del modulo e l'ho risolto.

(La mia ipotesi è che ci fosse una sorta di cache di moduli compilati e faceva riferimento a un modulo che non esisteva più, ma il cljc non è stato ricompilato perché un modulo di quel nome era ancora memorizzato nella cache.)

Quando ho rinominato lo spazio dei nomi del modulo ha funzionato, senza altre modifiche al codice.

Problemi correlati