Clojure#
Supported Clojure versions#
Semaphore 2.0 Virtual Machine (VM) comes with the Leiningen tool preinstalled. The
name of the binary executable is lein
which is what will be used in the
Semaphore 2.0 project presented in this page.
Changing Clojure version#
The version of Clojure that is going to be used on a project generated by
Leiningen depends on the contents of the project.clj
file. It can be found
in the root directory of each Leiningen project. Therefore, there is no need to
execute a specific command in order to change the current Clojure version.
Dependency management#
You can use Semaphore's cache tool to store and load any files or Clojure libraries that you want to reuse between jobs.
System dependencies#
Clojure projects might need packages like database drivers. As you have full sudo
access on each Semaphore 2.0 VM, you are free to install all required packages.
A sample Clojure project#
The following .semaphore/semaphore.yml
file illustrates how to execute two
Clojure projects created using the Leiningen tool:
version: v1.0
name: Clojure Language Guide
agent:
machine:
type: e1-standard-2
os_image: ubuntu2004
blocks:
- name: Lein version
task:
jobs:
- name: Print lein version
commands:
- lein version
- name: Compile with Clojure 1.9.0
task:
jobs:
- name: Hello World 1.9.0
commands:
- checkout
- cd one
- lein run
- name: Compile with Clojure 1.10.0
task:
jobs:
- name: Hello World 1.10.0
commands:
- checkout
- cd two
- lein run
For the one
project, the contents of project.clj
are as follows:
(defproject hw "0.1.0-SNAPSHOT"
:main one.core
:dependencies [[org.clojure/clojure "1.9.0"]])
This is where you specify the Clojure version you want to use for your project which, in this case, is 1.9.0.
For the two
project, the contents of project.clj
are as follows:
(defproject hw "0.1.0-SNAPSHOT"
:main two.core
:dependencies [[org.clojure/clojure "1.10.0"]])
Again, this is where you specify the Clojure version you want to use for your project which, in this case, is 1.10.0.
To sum up, project one
uses Clojure version 1.9.0 whereas project two
uses
Clojure version 1.10.0.
The contents of the ./src/one/core.clj
file from the one
project are as
follows:
(ns one.core)
(defn -main [& args]
(println "Hello World!")
(println "Clojure 1.9.0"))
The contents of the ./src/two/core.clj
file from the two
project are as
follows:
(ns two.core)
(defn -main [& args]
(println "Hello World!")
(println "Clojure 1.10.0!"))