Mariusz Prowaźnik

o programowaniu w Javie, Scali i Clojure.


Projekt Clojure z Apache Maven

Do budowania projektów Clojure mamy do wyboru Maven'a i Leiningen'a. W tym poście opiszę jak można stworzyć prosty projekt przy użyciu tego pierwszego. Wykorzystałem:

  • Eclipse Juno z wtyczką Counterclockwise
  • Maven 3

Stworzenie projektu

Wtyczka Counterclockwise umożliwia utworzenie projektu Clojure w Eclipse. Jednak jeśli chcemy projekt oparty o Mavena, to myślę, że najlepiej zacząć tworząc zwykły projekt Javovy. Naciśnij Alt+Shift+N, wybierz Java Project. Podczas tworzenia projektu dodaj dwa katalogi na źródła: src/main/clojure, src/test/clojure.

Dodaj pom.xml

Dodaj plik pom.xml o treści:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>pl.mpr</groupId>
 <artifactId>clojure-example</artifactId>

 <packaging>clojure</packaging>

 <version>1.0-SNAPSHOT</version>
 <name>clojure-example</name>
 <url>http://maven.apache.org</url>
 <build>
  <plugins>
   <plugin>
    <groupId>com.theoryinpractise</groupId>
    <artifactId>clojure-maven-plugin</artifactId>
    <version>1.3.12</version>
    <extensions>true</extensions>
   </plugin>
  </plugins>
  <testResources>
   <testResource>
    <directory>${basedir}/src/test/clojure</directory>
   </testResource>
  </testResources>
 </build>
 <dependencies>
  <dependency>
   <groupId>org.clojure</groupId>
   <artifactId>clojure</artifactId>
   <version>1.4.0</version>
  </dependency>
  <dependency>
   <groupId>org.clojure</groupId>
   <artifactId>clojure-contrib</artifactId>
   <version>1.2.0</version>
  </dependency>
 </dependencies>
</project>
Wykonaj:
mvn eclipse:eclipse
i odśwież projekt w Eclipse. W tym momencie powinno być dodane wsparcie dla Clojure:

Dodanie testu i kodu w Clojure

Zgodnie z prawidłami TDD zaczniemy od napisania testu. Będzie to test dla funkcji zwracającej łańcuch tekstowy "Hello world!". Stwórz w katalogu na testy paczkę, a w nim plik HelloTest.clj:

(ns pl.mpro.clojureexample.HelloTest
  (:use pl.mpro.clojureexample.Hello)
  (:use clojure.test))

(deftest get-hello-test
  (let [hello "Hello world!"]
    (is (= (get-hello) hello))))

Wybieramy z menu: Clojure->Run file in Repl. Oczekiwany rezultat to:

Oczywiście testujemy coś, czego jeszcze nie jest napisane, stąd powyższy błąd. Teraz czas na implementację. Stwórz w katalogu src/main/clojure plik Hello.clj:

(ns pl.mpro.clojureexample.Hello)

(defn get-hello []
  "Hello world!")

Ponownie załaduj HelloTest.clj. Tym razem się to powinno udać. W repl'u wpisz

(run-tests)
Spodziewany rezultat to:
Testing pl.mpro.clojureexample.HelloTest

Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
{:type :summary, :pass 1, :test 1, :error 0, :fail 0}
W oknie REPL możesz pisać kod clojure i zostanie on od razu wykonany. Jest jeszcze jedna wygodna funkcjonalność. W pliku Hello.clj dopisz:
(println "Test")
zaznacz i naciśnij Ctrl+Enter. To powinno wykonać w REPL zaznaczony kod.

Wykonanie testów przy użyciu Mavena

Przy obecnej konfiguracji, do wykonania testów clojure powinno wystarczyć:

mvn test
A

Testing pl.mpro.clojureexample.HelloTest

Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.812s
[INFO] Finished at: Thu Nov 15 00:20:20 CET 2012
[INFO] Final Memory: 6M/16M
[INFO] ------------------------------------------------------------------------
Jeśli się to nie powiodło, sprawdź, czy w pliku pom.xml jest:
<packaging>clojure</packaging>
Skompilować projekt można używając standardowo:
mvn package

http://evo-java.googlecode.com/svn/clojure-example

Brak komentarzy :

Prześlij komentarz