2016-02-07 9 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.