Leiningen 2 に移行しました。 Windows

Posted by TAKAIY On 2012年8月8日水曜日 0 コメント
ClojureScriptに手を出したのですが、lein depsがエラーを吐いてしまったので、ここで一つ、leiningen 2(lein2)に移行してみようと思ったわけです。

1から2へのアップグレード方法が本家のここのページにあるので、これに沿ってやってみた作業のログです。

ちなみに、環境はWindows7で、ファイル操作はEmacsのeshellでやっています。



古いLeiningen(Leiningen1)を退避します。

手順には

  $ mv ~/bin/lein ~/bin/lein1
こうしろと書いてありますが、以前インストールした場所で作業します。

d/u/q/D/clojure/leiningen $ ls -l
total 402
-rwxrwxrwx   1 q3197c         Domain U   5227 7 31 19:02 lein.bat
-rwxrwxrwx   1 q3197c         Domain U 401408 12 14  2010 wget.exe
d/u/q/D/clojure/leiningen $ mv lein.bat lein1.bat
d/u/q/D/clojure/leiningen $ ls -l
total 397
-rwxrwxrwx   1 q3197c         Domain U   5227 7 31 19:02 lein1.bat
-rwxrwxrwx   1 q3197c         Domain U 401408 12 14  2010 wget.exe

Version2 のlein.batを取ってきます。

本家のサイトのインストールのところにある、「the batch file」のリンク(ここでもOK)からlein.batをもってきて、同じ場所に置きます。

d/u/q/D/clojure/leiningen $ ls -l
total 402
-rwxrwxrwx   1 q3197c         Domain U   5425 8  3 14:41 lein.bat
-rwxrwxrwx   1 q3197c         Domain U   5227 7 31 19:02 lein1.bat
-rwxrwxrwx   1 q3197c         Domain U 401408 12 14  2010 wget.exe


インストール

以前wgetは入手済みなので、このまま進みますが、無ければ探してきて入れてください。
そこそこ時間が掛ります。

d/u/q/D/clojure/leiningen $ lein self-install
Downloading Leiningen now...
--2012-08-03 14:44:24--  https://cloud.github.com/downloads/technomancy/leiningen/leiningen-2.0.0-preview7-standalone.jar
..略..
Saving to: '----/.lein/self-installs/leiningen-2.0.0-preview7-standalone.jar'
     0K .......... .......... .......... .......... ..........  0% 9.37K 17m50s
..略..
 10050K .......... .......... .........                       100% 44.9K=10m40s
2012-08-03 15:09:35 (15.7 KB/s) - `----/.lein/self-installs/leiningen-2.0.0-preview7-standalone.jar' saved [10321086/10321086]

バージョンを確認してみる。

d/u/q3197c/.m2 $ lein version
(ここでいくつかのモジュールがインストールされる)
Leiningen 2.0.0-preview7 on Java 1.6.0_31 Java HotSpot(TM) Client VM
ちゃんとLein2になってます

プラグインの移行

lein2 ではプラグインの扱いが大きく変ったとのこと。

現状が以下の様になっていたら、
$ ls ~/.lein/plugins
lein-difftest-1.3.8.jar  lein-marginalia-0.7.1.jar lein-swank-1.4.4.jar

 ~/.lein/profiles.clj ファイルを以下のように書けとのこと。1つ増えちゃってるのは御愛嬌かな?

{:user {:plugins [[lein-difftest "1.3.8"]
                  [lein-marginalia "0.7.1"]
                  [lein-pprint "1.1.1"]
                  [lein-swank "1.4.4"] ]}}

自分の環境を確認してみると、

d/u/q/.lein/plugins $ ls
swank-clojure-1.3.4.jar

どう見ても、lein-swank と swank-clojure 同じものなので、swank clojureのサイトを確認してみるとやっぱり
Add [lein-swank "1.4.4"] to the :plugins section of either project.clj or your user profile.
(lein2を使っているなら、[lein-swank "1.4.4"]を追加する)
If you are still using Leiningen 1.x, you will need to do lein plugin install swank-clojure 1.4.2 instead.
(lein1を使っているなら、swank-clojureをインストールする)
と書いてあります。なので、現状のプラグインは、swank-clojureですが、lein-swankを入れます。

~/.lein/profiles.cljは存在しなかったので、作成しました。

d/u/q3197c/.lein $ cat profiles.clj
{:user {:plugins [[lein-swank "1.4.4"] ]}}


Precate

手順を見ると、次にはPrecateをインストールせよとあります。
lein1のプロジェクトで lein precate とすると、lein2用の設定についてのアドバイスが貰えるそうなので、その通りにコマンドを打ってみますが、うまく行きません。
$ lein plugin install lein-precate 0.3.1
Could not find artifact lein-swank:lein-swank:pom:1.4.4 in central (http://repo1.maven.org/maven2)
Retrieving lein-swank/lein-swank/1.4.4/lein-swank-1.4.4.pom (1k)
    from https://clojars.org/repo/
Could not find artifact lein-swank:lein-swank:jar:1.4.4 in central (http://repo1.maven.org/maven2)
Retrieving lein-swank/lein-swank/1.4.4/lein-swank-1.4.4.jar (109k)
    from https://clojars.org/repo/
The plugin task has been removed.
Please see the upgrade guide for instructions on how to use the user profile to
specify plugins instead: https://github.com/technomancy/leiningen/wiki/Upgrading

さっき設定したlein-swankがインストールされましたが、precateはでてきません。なぜでしょう。
「The plugin task has been removed.」って書いてあるので、pluginタスクはもう使えないぞって言ってるようです。Upgradeのページを見ろって書いてありますけど、いやいや、そこを見てやってるんだってば。

lein-precateのサイトに行ってみると、このプラグインはlein1で使うようにできてますって書いてある。なにそれ。
まあ、lein1は、lein1.batになっているので、これでインストールします。
$ lein1 plugin install lein-precate 0.3.1
[INFO] Unable to find resource 'lein-precate:lein-precate:jar:0.3.1' in repository central (http://repo1.maven.org/maven2)
Including lein-precate-0.3.1.jar
Created lein-precate-0.3.1.jar
入りました。

Precate使ってみます。

$ cat project.clj
(defproject score_card "0.1.0"
  :description "Web app."
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [postgresql/postgresql "9.1-901.jdbc4"]
                 [org.clojure/java.jdbc "0.2.1"]
                 [ring/ring-jetty-adapter "1.0.1"]
                 [compojure "1.0.1"]
                 [hiccup "0.3.8"]
                 [sandbar/sandbar "0.4.0-SNAPSHOT"]]
  :dev-dependencies [[clj-stacktrace "0.2.4"]
                     [ring-serve "0.1.2"]]
  :web-content "public"
  :repositories  {"sonatype-oss-public"
                  "https://oss.sonatype.org/content/groups/public/"})d/u/q/w/clojure/score_card $
$ lein1 precate
(defproject score_card/score_card "0.1.0"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [postgresql/postgresql "9.1-901.jdbc4"]
                 [org.clojure/java.jdbc "0.2.1"]
                 [ring/ring-jetty-adapter "1.0.1"]
                 [compojure "1.0.1"]
                 [hiccup "0.3.8"]
                 [sandbar/sandbar "0.4.0-SNAPSHOT"]]
  :web-content "public"
  :profiles {:dev
             {:dependencies
              [[clj-stacktrace "0.2.4"] [ring-serve "0.1.2"]]}}
  :repositories {"sonatype-oss-public"
                 "https://oss.sonatype.org/content/groups/public/"}
  :min-lein-version "2.0.0"
  :description "Web app.")

なるほど。古いproject.cljから修正版を作ってくれるんですな。
:dev-dependenciesの項目は:profilesの項目に書き変ってますね。あと、「:min-lein-version "2.0.0"」っていうエントリが追加されてます。

何も確認せずにそのまま使えないかもしれませんけど、便利だね。

lein2を使ってみる

インストールできたので、clojure scriptのプロジェクトに再挑戦。

$ lein new cljstest  project.cljを編集。 ここのサンプルを参考にしました。
(defproject cljstest "1.0.0-SNAPSHOT"
  :plugins [[lein-cljsbuild "0.2.3"]]
  :cljsbuild {
    :builds [{
        :source-path "src"  ; もともとあるところを使う
        :compiler {
          :output-to "main.js"  ; サンプルは深いところだったので、とりあえず裸を指定
          :optimizations :whitespace
          :pretty-print true}}]})

src/core.clj を src/core.cljs にリネームして、編集します。
(ns cljstest.core)
(.alert js/window "Hello")
で、
$ lein cljsbuild once
Compiling ClojureScript.
java.lang.Exception: lein-cljsbuild requires your project to specify which Clojure version it uses

あらあら。おこられた。このサンプルまちがってるじゃん。

(defproject cljstest "1.0.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]]  ;追加
  :plugins [[lein-cljsbuild "0.2.3"]]
  :cljsbuild {
    :builds [{
        :source-path "src"
        :compiler {
          :output-to "main.js"
          :optimizations :whitespace
          :pretty-print true}}]})

気を取りなおして実行。

$ lein cljsbuild once
Compiling ClojureScript.
(たくさんライブラリをダウンロード....)
Compiling "main.js" from "src"...
Successfully compiled "main.js" in 9.902396425 seconds.

できました。確認すると、プロジェクトのルートにmain.jsが出きています。ここからのパスを指定するということらしいですね。

d/u/q/w/clj-script/cljstest $ ls
README  classes  main.js  project.clj  src  target  test

できたので、これを使ってみます。

<html>
  <head>
    <title>cljstest</title>
  </head>
  <body>
    <script type="text/javascript" src="main.js"></script>
  </body>
</html>

こんなファイルをつくって、ブラウザで開いて、アラートが表示されたのでOKでした。


今日はここまで。

0 コメント:

コメントを投稿