t100のプログラミング脱出作戦

自分のプログラミング脳をプログラムにして、いつかプログラミングから脱出してやるぞっ!とか夢見ながら、日々プログラム作っていく 百野 貴博 の日記です!今は、屋号『百蔵。』として、Silverlight・WPFを追跡中です! (2007/09/30)
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
【--/--/-- --:--】 | スポンサー広告 | トラックバック(-) | コメント(-) top↑
Clojure のビルドツール Leiningen のFAQ
なかなか Leiningen のチュートリアルにトライできないので、とりあえず Leiningen のページにあったFAQを訳してみました。

結構機能がいっぱいあるみたいですね~。
先に読んでおくと、機能のあたりを付けるのに良いかもしれないですね。

※また例によって、誤訳等ありましたら指摘頂けますとありがたいです。宜しくお願い致します。

Leiningen + Clojure でサクサクコード書けるように頑張らないと。

(本文中のリンクは全て英語のページです。)

Q: Leiningen は、どうやって発音しますか?
A: LINE-ing-en と思います。(ライニンジェン?)

Q: Lancet 以上の機能を提供するんですか?
A: Lancet は、ビルドツールというよりは、むしろライブラリ寄りです。Antが提供しているような事前に定義されたタスクはありません。
だから、LancetにはClojureに限定したものも何もありません。
Leiningen は、Lancetの上でビルドします。しかし、もっと進んでいます。もう少し言うと、依存関係の解決のために幾つかのMavenの機能も含んでいます。

Q: しかしMavenは脅威ですよね!
A: それは問題ではありません。Leinningen は、依存関係の解決の為だけにMavenの一部をより使いやすいように使っています。
タスクを実行するためのサイクルには、Lancet経由でカバーされたAntを使っています。

Q: しかしAntは脅威ですよね!
A: それは事実ですね。Antは残念な構文を含んだ手続き言語の為のインタプリタ―です。
あなたが、ビルドして結合する機能の標準ライブラリとして、より良い構文と一緒に書くことが出来るのであれば、悪くないと思います。

Q: グループID とは何ですか?スナップショットは、どのように機能しますか?
A: チュートリアルを見てみてください。

Q: 私のバージョン番号は、どうやって付けたらいいですか?
A: semantic versioning を使いましょう。

Q: 私のプロジェクトが、どのリポジトリにも無い jar に依存する場合どうしたらいいですか?
A: オープンソースのJarは、Clojars にアップロードできます。( チュートリアルの"Publishing" を見てください)
とはいえ、競合を回避するために "org.clojars.$USERNAME" のグループIDを使ってください。
そして、将来オリジナルの作者がアップロードできる時間ができたときに、そうできるようにしてください。
もうひとつの方法として、自分のために ~/.m2 にローカルリポジトリのMavenをインストールすることもできます。
外部のどのリポジトリにもない依存関係をproject.clj へ依存関係を追加して、lein deps を実行します。
それは成功しないですが、しかしアウトプットはそれを実行するための mvn の呼び出しを含みます。
もっとも、繰り返しという意味でリモートリポジトリから取得できた方が良いです。
チームがプライベートなプロジェクトで働く場合は、Hudson もよく機能します。

Q: 自分のためのタスクは、どのように書けますか?
A: そのタスクが、あなたのプロジェクト以外にも使えそうなものであれば、プラグインとして作るのが良いでしょう。
切り出すのがふさわしくないのであれば、src/leiningen/ ディレクトリに一度きりのタスクを含めることができます。
プラグインガイドは、その方法を示します。

Q: 二つのプロジェクトを平行して扱いたいのですが、それらを切り替えるのがわずらわしいです。
A: 依存関係のチェックアウト(checkout dependencies) と呼ばれる機能を利用してください。
プロジェクトのルートディレクトリにcheckout というディレクトリを作って他のプロジェクトのシンボリックリンクをその中に入れるなら、Leiningen は、それらを平行して扱うことを許可します。
これは、依存関係の変化が メインプロジェクトから install/switch-projects/deps/restart-swank というサイクルなしに確認できることを意味します。

Q: 間接的な依存関係を除外することは可能ですか?
A: もちろんです。ライブラリの中には、log4j のようなパブリックなリポジトリに含まれなくて、基本機能に不必要なプロジェクトに依存するものもあります。
:exclusions キーを使うことで :dependencies のリストからそれらの依存関係を除くことができるでしょう。
詳細は、sample.project.clj を見てください。

Q: "super-pom" に必要な生成物がありませんといわれます。これな何ですか?(a required artifact is missing for "super-pom")
A: Leiningen で使われる Maven APIは、あなたのプロジェクトを"super-pom" として参照します。これはAPIのねじれです。
たいていの場合、project.clj の :dependency 定義にスペルミスがある場合が多いです。

Q: java.lang.NoSuchMethodError: clojure.lang.RestFn.(l)V の意味はなんですか?
A: あなたの持っているいくつかのコードが、現在あなたが使っているのとは異なるバージョンのClojureによって以前にコンパイルされたもの(AOT: ahead-of-time) だということです。
lein clean を実行した後も残るなら、あなたの依存関係に問題があります。もしcontrib に依存しているなら、contrib のバージョンをClojureのバージョンと一致させてください。
あなた自身のプロジェクトでのAOT コンパイルが、他の言語程重要な問題でないことに注意してください。
言語レベルの機能が動く為にAOTコンパイルが必要なものが幾つかあります。一般的には、Javaの互換性の為です。
もし、それらの機能を使う必要が無いのであれば、あなたのプロジェクトではAOTコンパイルは、仮に他のプロジェクトでそれらに依存していたとしても使う必要はありません。

テーマ: プログラミング - ジャンル: コンピュータ













管理者にだけ表示を許可する


トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。