2016-02-07 8 views
7

Clojure(Garden)とClojureScript(Reagent)の間で名前空間を共有する必要があります。cljcファイルを必要としないClojure

は、現在のプロジェクトフォルダには、次のようになります。

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

config.cljcファイルには、次の名前空間を持っている:(ns name.config)

私は、この名前空間を内部でclj/name/css.cljから参照しようとしました。

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

ただし、Gardenからのコンパイルエラーが発生します。

原因:java.io.FileNotFoundException:クラスパスにname/config__init.classまたはname/config.cljが見つかりませんでした。

私はそれがcljcファイルをチェックしていないと思います。

"src/cljc":source-pathsベクトルにproject.cljとに追加しましたが、ビルドプロセスを再開しても同じエラーが発生します。

Clojure 1.7.0と1.8.0でこの現象が見られます。

ClojureScript(ビルドを処理するFigwheel)で問題なく動作することに言及する価値があるかもしれません。私は問題なく新しい名前空間を要求し使用することができます。

.cljcのファイルのいずれも、それらを必要とすることさえ言及されていないので、私は何かが本当に簡単に欠けているに違いないようです。

答えて

5

project.cljでClojure 1.7以上を使用しているかどうかを確認してください。このエラーメッセージ:java.io.FileNotFoundException:によって引き起こさ

クラスパス上の名前/ config__init.classまたは名前/ config.cljを見つけることができませんでした。

はClojureのこれらのバージョンのみ.classまたは.cljファイルを探すために知っているあなたは、以下のClojure 1.6を使用していることを示しています。

+1

'project.clj'は' '1.7.0" 'に' org.clojure/clojure'を持ち、REPLを起動すると 'Clojure 1.7.0'が確認されます。 'project.clj'で設定する必要があるものは何ですか? –

+1

1.8.0を使用しても同じ問題が発生します。 –

+0

あなたはどのバージョンのLeinigenを使用していますか?存在する場合は、最新のものを試してみてください。 –

0

プロジェクトで.cljから.cljcにファイルを移動したときに同じエラーが発生しました。私はlein cleanでしたが、それは効果がありませんでした。最終的に私はモジュールの名前空間の名前を変更し、それを修正しました。

(私の推測では、コンパイルされたモジュールのキャッシュがあり、もはや存在しないモジュールを参照していたが、cljcはその名前のモジュールがまだキャッシュされていたために再コンパイルされていなかった)。

モジュールの名前空間の名前を変更しても、コードに変更はありませんでした。

関連する問題