2013-09-28 1 views
1

Я только начал с Clojure и никогда не использовали JavaClojure: использование библиотечных функций из РЕПЛ

я понял, как создать и запустить Leiningen проект от терминала, но я не могу понять, как загружать библиотеки в REPL перед запуском команд.

Я пытаюсь создать простой web scrapler с clj-webdriver; мой исходный файл выглядит следующим образом

(ns prova.core (:gen-class)) 

(use 'clj-webdriver.taxi) 

(set-driver! {:browser :firefox}) 

(defn -main 
    [& args] 

    (to "https://github.com/login") 

    (input-text "#login_field" "email") 
    (input-text "#password"  "psw") 

    (click "input[name='commit']") 

) 

Ближайший я (думаю) есть, чтобы достичь это собиралось в папку WebDriver Src и попробуйте эту команду

[email protected]:~/clj-webdriver-master/src/clj_webdriver$ clojure 
Clojure 1.4.0 
user=> (use 'taxi) 

но он вернулся

FileNotFoundException Could not locate taxi__init.class or taxi.clj on classpath: clojure.lang.RT.load (RT.java:432) 

даже ты в той же папке, что файл taxy.clj действительно присутствовал.

Итак, какова процедура запуска REPL, которая может использовать библиотечные функции?

Большое спасибо

+1

Как примечание, если вы хотите попробовать библиотеку без создания проекта, вы можете использовать [lein-try] (https://github.com/rkneufeld/lein-try). Очень классный плагин leiningen. – izaban

ответ

3

Посмотрите на инструмент leiningen сборки, установите его в соответствии с инструкциями веб-сайта и сделать новый проект.

lein new myproject 
cd myproject 

Затем отредактируйте project.clj, в котором вы добавляете CLJ-WebDriver как зависимость:

(defproject myproject "0.1.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :url "http://example.com/FIXME" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :dependencies [[org.clojure/clojure "1.5.1"] 
       [clj-webdriver "0.6.0"]]) 

Затем введите lein repl и РЕПЛ будет вращаться с CLJ-WebDriver на пути к классам. Теперь вы должны продолжить, как и в своем примере.

+0

Отлично работает! Для других noobies, подобных мне: после того, как вы сделали «lenin repl» (где обычно вы будете делать «lenin run»), REPL выполнит весь код до «defn -main», так что теперь это похоже на то, что вы печатаете и выполняете основная функция по строкам. Вы также можете скопировать/вставить несколько строк, и они будут обработаны последовательно. – Sovos

+1

Выражения верхнего уровня всегда оцениваются при загрузке кода и не должны содержать побочных эффектов в целом. Поместите их внутри функций и вызовите их из REPL. –