2017-03-26 4 views
0

hyphenation algorithm(ネームスペースhyphenator-clj.core)を実装しました。org.clojars.nikonyrh.hyphenator-clj 0.1.0defprojectと定義し、Clojarsにプッシュしました。 Uberjarはcore__init.class,core.cljcore.classのようなファイルを持っているようです。私は他のプロジェクトへの依存性としてそれを使用しようとするとclojarsを使った単純なライブラリの配布

は、しかし、私はこのエラーが出る:それは期待org/clojars/nikonyrh/hyphenator_clj__init.classと一致する、または私は何とかオーバーライドすることができるように

$ lein uberjar 
Retrieving org/clojars/nikonyrh/hyphenator-clj/org.clojars.nikonyrh.hyphenator-clj/0.1.0/org.clojars.nikonyrh.hyphenator-clj-0.1.0.pom from clojars 
Retrieving org/clojars/nikonyrh/hyphenator-clj/org.clojars.nikonyrh.hyphenator-clj/0.1.0/org.clojars.nikonyrh.hyphenator-clj-0.1.0.jar from clojars 
Compiling example.core 
java.io.FileNotFoundException: Could not locate org/clojars/nikonyrh/hyphenator_clj__init.class or org/clojars/nikonyrh/hyphenator_clj.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name., compiling:(core.clj:1:1) 
Exception in thread "main" java.io.FileNotFoundException: Could not locate org/clojars/nikonyrh/hyphenator_clj__init.class or org/clojars/nikonyrh/hyphenator_clj.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name., compiling:(core.clj:1:1) 
    at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3657) 
    at clojure.lang.Compiler.compile1(Compiler.java:7474) 
    at clojure.lang.Compiler.compile1(Compiler.java:7464) 
    at clojure.lang.Compiler.compile(Compiler.java:7541) 
    at clojure.lang.RT.compile(RT.java:406) 
    at clojure.lang.RT.load(RT.java:451) 
    at clojure.lang.RT.load(RT.java:419) 
    at clojure.core$load$fn__5677.invoke(core.clj:5893) 
    ... 

私は私のプロジェクトのフォルダ構造を変更する必要があります現在の行動?これについての良いチュートリアルがあれば、私はそれを読むことができます。

基本的に私はこのサンプルプロジェクトを稼働させたいと思います。 project.clj:

(defproject example "0.0.1-SNAPSHOT" 
    :description "" 
    :dependencies [[org.clojure/clojure "1.8.0"] 
       [org.clojars.nikonyrh.hyphenator-clj "0.1.0"]] 
    :javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"] 
    :aot [example.core] 
    :main example.core) 

のsrc /例/ core.clj:

(ns example.core 
    (:require [org.clojars.nikonyrh.hyphenator-clj :as h]) 
    (:gen-class)) 

(defn -main [& argv] (doseq [arg argv] (println (h/hyphenate arg :hyphen \-)))) 

私は、それが中に含まれていないとして、私はまた、間違ったディレクトリ内english.txtを持って疑っていますuberjarしかしリソースファイルは、他のトピックです。

答えて

0

私はこのプロセスをもう少しよく理解しています。基本的に私のrequireは、プロジェクトの名前とは非常に異なる使用済みJARファイルの構造と一致しなければなりません。例えば、cc.qbits/spandexは、実際にはrequiredであり、qbits.spandexである。

英語。TXT依存性は、resourcesフォルダに移動Clojarsに新しいバージョンを展開し、それがJARに存在する依存関係をインポートすることによって修正されました:

(ns example.core 
    (:require [hyphenator-clj.core :as h]) 
    (:gen-class)) 

(defn -main [& argv] (doseq [arg argv] (println (h/hyphenate arg :hyphen \-)))) 
0

名前空間hyphenator-cljでハイフンを使用しない方がよいでしょう。なぜhyphenatorを使用しないのですか?しかし、あなたがディレクトリの名前にハイフンではなくアンダースコアを付けるべきだと思われる場合は、hyphenator_cljとしてください。

この問題を修正しても問題が解決しない場合は、あなたの質問からはわかりませんが、正確にcore.cljがディレクトリ構造にあります。project.cljにはそれが反映されていますか?たとえば、プロジェクトのルートからsrcディレクトリにある名前空間hyphenator-clj.coreのパスがありますか?あなたのプロジェクトのルートは、project.cljの場所として定義されています。

質問にお答えいただきたいことは、プログラムをuberjarにパッケージ化せずにローカルでのみ動作させることができるかどうかと、クロージャーに出荷することです。私の推測は、それがローカルで動作することですが、それが述べられるのに役立ちます。

今すぐあなたのリンクを見てください。例えば、hereのように、名前にハイフンが付いているクロージャーにデプロイされている作業中のプロジェクトを読むのが好きかもしれません。最初に気がつく違いは、使用するプロジェクト名がかなり長いことです:org.clojars.nikonyrh.hyphenator-clj。それはちょうどhyphenator-cljでなければなりません。また、そのプロジェクトのように "-SNAPSHOT"で終わる識別子を持つことをお勧めします。

しかし、大きな画像を見て、あなたがコメントで示唆した素晴らしいアイデアは、Clojarsが混在していない状態でテストすることです。これを行うには、別のleinプロジェクトから使用するライブラリにlein installを使用します。

+0

ファイルはSRC/hyphenator_clj/core.clj(最初のリンクでです問題はGithubにある)。プロジェクトは私の以前のプロジェクトハイフネータ-phpからのポートであるため、ハイフネータ - cljです。もちろん、Clojarの文脈では「clj」は単なる余計なノイズです。 – NikoNyrh

+0

hyphenator-cljは、あなたがビルドしてjarを実行できるという意味では "ローカル"で動作しますが、Clojars以外の他のプロジェクトでも使ってみることはできませんでした。 – NikoNyrh

関連する問題