-
create a clojure project using leiningen
$ lein new <project> -
create a
run.shscript andbuild.gradlefile -
create a
libdirectory and put theclojure-1.10.1.jarin the directory
<project>/
│
├── run.sh (create file)
│
├── project.clj (created by lein)
│
├── build.gradle (create file)
│
├── libs/ (created dir)
│ └── clojure-1.10.1.jar
│
├── src/ (created by lein)
│ └── packagename
│ ├── Main.java
│ └── core.clj
│
├── build/ (created by gradle)
│
├── target/ (created by lein)
│
└── test/ (created by lein)
#!/usr/bin/env bash
runLein(){
echo "running lein project ..."
lein clean &>/dev/null
lein compile &>/dev/null
lein uberjar &>/dev/null
}
runGradle(){
echo "running gradle tasks..."
gradle clean
gradle build
gradle run
}
runLein;
runGradle;
exit 0
apply plugin: 'java'
sourceSets{
main.java.srcDir 'src'
}
jar{
manifest.attributes 'Main-Class': 'packagename.Main'
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
implementation fileTree(dir: 'libs', include: '*.jar')
}
task run(type: JavaExec){
main = 'packagename.Main'
classpath = files('lib/clojure-1.10.1.jar')
classpath += files('target/clojure-functions-1.1.1.jar')
classpath += sourceSets.main.runtimeClasspath
}
(defproject clojure-functions "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.10.0"]]
:repl-options {:init-ns packagename.core}
:main packagename.core
:aot [packagename.core]
)
(ns packagename.core ;; name space
(:gen-class))
(defn hello-world []
(print "Hello World"))
(defn -main [name]
"...just another main"
(println "... lets get started!"))
package packagename;
import clojure.java.api.Clojure;
import clojure.lang.IFn;
public class Main{
public static void main(String[] args) throws Exception{
// clojure-code namespace
IFn require = Clojure.var("clojure.core", "require");
require.invoke(Clojure.read("packagename.core"));
IFn hello_world = Clojure.var("packagename.core", "hello-world");
System.out.println(hello_world.invoke());
}
}
finally,
$ sudo chmod +x run.sh
$ ./run.sh
- the terminal should display
> Task :run
Hello World
null