创建类文件
源代码应位于./src/main/clojure
因为它是默认目录。
不过,可以在 gradle 文件中指定源文件。
sourceSets {
main {
clojure {
srcDirs = ['src']
}
}
}
另一个问题是缺少依赖项:
repositories {
maven { url "http://clojars.org/repo" }
mavenCentral()
}
dependencies {
compile "org.clojure:clojure:1.6.0"
}
gradle build
将生成类文件。
获取jar文件
我们需要为 jar 文件设置主类。
jar
{
manifest.attributes("Main-Class": "hello.core")
}
我不太确定设置是否非常必要;gradle jar
将生成 jar 文件。
执行jar文件
这是运行代码的命令:
java -cp .:<PATH>/clojure-1.6.0.jar:build/libs/clojure_test.jar hello.core
uberjar
需要进行三处修改:来自的提示https://github.com/DevonStrawn/Clojuresque-Boilerplate/blob/master/UberJar/build.gradle.
uberjar
{
manifest.attributes("Main-Class": "hello.core")
}
apply plugin: 'application'
uberjar.enabled = true
执行 uberjar
现在只需一个 jar 即可执行
clojure_test> java -jar build/libs/clojure_test-standalone.jar
Hello, World!
新的 build.gradle 文件
buildscript {
repositories {
maven { url "http://clojars.org/repo" }
mavenCentral()
}
dependencies {
classpath "clojuresque:clojuresque:1.7.0"
}
}
apply plugin: 'clojure'
clojure.aotCompile = true
sourceSets {
main {
clojure {
srcDirs = ['src']
}
}
}
repositories {
maven { url "http://clojars.org/repo" }
mavenCentral()
}
dependencies {
compile "org.clojure:clojure:1.7.0"
}
jar
{
manifest.attributes("Main-Class": "hello.core")
}
uberjar
{
manifest.attributes("Main-Class": "hello.core")
}
apply plugin: 'application'
uberjar.enabled = true
影坛
从 Opal 的回答中,我添加了创建 ShadowJar 的 gradle 脚本。它包含设置主类的 MANIFEST 文件。
buildscript {
repositories {
maven { url "http://clojars.org/repo" }
mavenCentral()
jcenter()
}
dependencies {
classpath "clojuresque:clojuresque:1.7.0"
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.0'
}
}
apply plugin: 'application'
apply plugin: 'clojure'
apply plugin: 'com.github.johnrengelman.shadow'
clojure.aotCompile = true
mainClassName = 'hello.core'
sourceSets {
main {
clojure {
srcDirs = ['src']
}
}
}
repositories {
maven { url "http://clojars.org/repo" }
mavenCentral()
}
dependencies {
compile "org.clojure:clojure:1.7.0"
}
或者使用这两行代码代替清单更改代码:
apply plugin: 'application'
mainClassName = 'hello.core'
执行shadow jar
获取 ubjer jar
gradle shadow
和uberjar是一样的。
clojure_test> java -jar build/libs/clojure_test-all.jar
Hello, World!
参考
- https://github.com/johnrengelman/shadow
- 锅炉板-https://github.com/DevonStrawn/Clojuresque-Boilerplate
- 使用 Gradle 构建 uberjar