giter8 - narzędzie tworzenia plików i katalogów na podstawie szablonów w GitHub
Był czas, kiedy żyłem w błogiej niewiedzy istnienia Scala Build Tools (sbt). Potrzebowałem narzędzia do zarządzania projektem - budowania go z pobraniem zależnych bibliotek, kompilacją, wykonaniem testów, itp. To właśnie zadanie dla sbt.
Wszystkie znaki na niebie i ziemi mówiły mi, że ostatnią rzeczą, jaką robi sbt, to utworzenie nowego projektu z właściwą strukturą katalogową. Okazało się, że sbt jest na tyle "wyrafinowane", że potrafi pracować z każdą strukturą katalogów, co w zasadzie powinno mnie cieszyć, ale przy mojej niewiedzy, tylko komplikowało sprawę. Skąd miałbym wiedzieć, jak rozłożyć pliki źródłowe aplikacji, aby było dobrze, jeśli...wszystko może być dobrze (czy właśnie nie odpowiedziałem sobie na to pytanie?)
To zapewne był powód odpalenia projektu giter8 (w skrócie g8). Już nie pamiętam, kto mi go wskazał, ale to miało być rozwiązaniem moich bolączek. I faktycznie było.
"Giter8 is a command line tool to generate files and directories from templates published on github or any other git repository. It's implemented in Scala and runs through the Simple Build Tool launcher, but it can produce output for any purpose."
Instalacja opisana jest na stronie Installation. Jej zakończenie obwieszcza uruchomienie g8.
$ g8 giter8 0.5.3 Usage: g8 [TEMPLATE] [OPTION]... Apply specified template. OPTIONS -b, --branch Resolves a template within a given branch --paramname=paramvalue Set given parameter value and bypass interaction. Apply template and interactively fulfill parameters. g8 n8han/giter8 Or g8 git://github.com/n8han/giter8.git Apply template from a remote branch g8 n8han/giter8 -b some-branch Apply template from a local repo g8 file://path/to/the/repo Apply given name parameter and use defaults for all others. g8 n8han/giter8 --name=template-test
g8 typesafehub/scala-sbt - Scala sbt template
I co teraz?
W Usage do g8, napisano: "Template repositories must reside on github and be named with the suffix .g8. We're keeping a list of templates on the wiki." I to cieszy, że komuś zależy i zebrał pomocne szablony w jednym miejscu!
Właśnie dzisiaj trafiłem na projekt Scala sbt template, który jest "A giter8 template for Scala projects using sbt."
Skoro należy do repozytorium projektów Typesafe Inc., to można założyć, że jest projektem błogosławionym przez samych twórców Scali (niekoniecznie gwarancja jakości, ale chociaż aktualności). Coś mi jednak mówi, że ostatnia zmiana "authored a year ago" nie jest specjalnie obiecująca w kontekście aktualności projektu. Ale co robić?
Odpalam
g8 typesafehub/scala-sbt
i korzystam wstępnie z projektu.$ g8 typesafehub/scala-sbt Scala Project Using sbt organization [org.example]: pl.japila name [Scala Project]: scala_version [2.9.2]: 2.10.1 version [0.1-SNAPSHOT]: Template applied in ./scala-project jacek:~/sandbox $ cd scala-project/ jacek:~/sandbox/scala-project $ tree . ├── README ├── project │ └── ScalaProjectBuild.scala └── src └── main └── scala └── pl └── japila └── ScalaProject.scala 6 directories, 3 files $ cat README A sample for the Typesafe Stack (http://typesafe.com/stack). Scala sample project using Scala and SBT. To run and test it use SBT invoke: 'sbt run' jacek:~/sandbox/scala-project $ sbt run [info] Loading project definition from /Users/jacek/sandbox/scala-project/project [info] Updating {file:/Users/jacek/sandbox/scala-project/project/}default-9e49ab... [info] Resolving org.scala-sbt#precompiled-2_10_0;0.12.2 ... [info] Done updating. [info] Compiling 1 Scala source to /Users/jacek/sandbox/scala-project/project/target/scala-2.9.2/sbt-0.12/classes... [info] Set current project to Scala Project (in build file:/Users/jacek/sandbox/scala-project/) [info] Updating {file:/Users/jacek/sandbox/scala-project/}scala-project... [info] Resolving org.scala-lang#scala-library;2.10.1 ... [info] Done updating. [info] Compiling 1 Scala source to /Users/jacek/sandbox/scala-project/target/scala-2.10/classes... [info] Running pl.japila.ScalaProject Hello, Scala Project [success] Total time: 13 s, completed May 29, 2013 10:08:54 PM"Hello, Scala Project" oraz "success" na końcu dają mi pewne poczucie spełnienia moich oczekiwań. Mam swój pierwszy projekt w Scali z udziałem g8!
g8 kobmic/plain-scala
Jeszcze na koniec swojej wyprawy w świat uruchomienia projektów scalowych z g8 przeszukałem sieć i trafiłem na kobmic/plain-scala. Wydaje się być świeższą i bardziej kompletną alternatywą do szablonu z Typesafe.
Projekt scala-project idzie do kosza i odpalam
g8 kobmic/plain-scala
.jacek:~/sandbox $ g8 kobmic/plain-scala Plain Scala project with scalatest and/or specs2 version [0.1.0-SNAPSHOT]: organization [my.organization]: pl.japila name [MyScalaProject]: Template applied in ./myscalaprojectI już widzę miejsce do poprawy w szablonie - nazwa tworzonego projektu jest bez (ostatnio ulubionych) myślników.
Kontynuuję prace...
jacek:~/sandbox $ cd myscalaproject jacek:~/sandbox/myscalaproject $ tree . ├── build.sbt ├── project │ └── plugins.sbt └── src ├── main │ └── scala │ └── Stub.scala └── test └── scala ├── StubSpec.scala └── StubTest.scala 6 directories, 5 filesTym razem stawiam na pisanie testów do mojego wymyśl(o)nego projektu w Scali. Stąd też powód uruchomienia
sbt test
.// pół pobranego Internetu później...
jacek:~/sandbox/myscalaproject $ sbt test [info] Loading project definition from /Users/jacek/sandbox/myscalaproject/project [info] Set current project to MyScalaProject (in build file:/Users/jacek/sandbox/myscalaproject/) [info] StubTest: [info] you description here [info] - should do something [info] StubSpec [info] [info] The 'Hello world' string should [info] + contain 11 characters [info] + start with 'Hello' [info] + end with 'world' [info] [info] [info] Total for specification StubSpec [info] Finished in 27 ms [info] 3 examples, 0 failure, 0 error [info] [info] Passed: : Total 4, Failed 0, Errors 0, Passed 4, Skipped 0 [success] Total time: 4 s, completed May 29, 2013 10:57:20 PMW Usage projektu można przeczytać, że odpalenie
sbt eclipse
lub sbt gen-idea
pozwala na łatwiejsze wczytanie projektu do ulubionego IDE. Wybieram IntelliJ IDEA.
Brak komentarzy:
Prześlij komentarz