gpt4 book ai didi

jar - 使用 gradle/clojuresq 构建 clojure

转载 作者:行者123 更新时间:2023-12-04 22:20:10 28 4
gpt4 key购买 nike

我正在尝试使用 gradle/Clojuresque 来构建 clojure 代码,运行它并获取 uberjar。
我使用来自 http://dev.clojure.org/display/doc/Getting+Started+with+Gradlehttps://bitbucket.org/kotarak/clojuresque/wiki/Getting%20Started'Could not find us.bpsm:edn-java:0.4.3' error with Gradle for Clojure (Clojuresque) 的提示。

这是成绩单。

buildscript {
repositories {
maven { url "http://clojars.org/repo" }
mavenCentral()
}
dependencies {
classpath "clojuresque:clojuresque:1.7.0"
}
}

apply plugin: 'clojure'

clojure.aotCompile = true

repositories {
flatDir dirs: project.file("lib/runtime")
maven { url "http://clojars.org/repo" }
}

使用 gradle build 任务,没有错误,我有一个 jar 文件,但我没有看到生成任何类文件;我认为生成的 jar 不包含任何内容,尤其是当我比较手动构建 ( Compile clojure source into class (AOT) from command line (not using lein) ) 的结果时。
.
├── build
│   ├── libs
│   │   └── clojure.jar
│   └── tmp
│   └── jar
│   └── MANIFEST.MF
├── build.gradle
└── src
└── hello
└── core.clj

这是core.clj
(ns hello.core
(:gen-class))
(defn -main
"This should be pretty simple."
[]
(println "Hello, World!"))

可能有什么问题?另外,如何像 lein runlein uberjar 一样运行代码并获取 uberjar?

我在 https://dl.dropboxusercontent.com/u/10773282/share/2015/clojure_test.zip 中压缩了目录

最佳答案

创建类文件

源代码应位于 ./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

super jar

需要进行三处修改:来自 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

影 jar

从 Opal 的回答中,我添加了创建 shadowJar 的 gradle 脚本。它包含设置 Main-Class 的 MAINFEST 文件。
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"
}

或者使用这两行代码代替 list 更改代码:
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
  • Building a uberjar with Gradle
  • 关于jar - 使用 gradle/clojuresq 构建 clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29015575/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com