我正在尝试使用gradle/Clojuresque来构建clojure代码,运行它,并获得uberjar。我使用来自http://dev.clojure.org/display/doc/Getting从Gradle开始,https://bitbucket.org/kotarak/clojuresque/wiki/Getting开始了,但“找不到我们”。bpsm:ednjava:0.4。Clojure(Clojuresque)的Gradle出现3'错误。
这是年级脚本。
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包含任何东西,特别是当我比较从手动构建的结果(编译Clojure源代码到类(AOT)从命令行(不使用lein))。
.
├── build
│ ├── libs
│ │ └── clojure.jar
│ └── tmp
│ └── jar
│ └── MANIFEST.MF
├── build.gradle
└── src
└── hello
└── core.clj
这是核心。clj
(ns hello.core
(:gen-class))
(defn -main
"This should be pretty simple."
[]
(println "Hello, World!"))
什么可能是错的?此外,如何运行代码并获得uberjar像lein run
和lein uberjar
?
我把目录压缩到https://dl.dropboxusercontent.com/u/10773282/share/2015/clojure_test.zip
您缺少maven中央存储库:
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" }
mavenCentral()
}
dependencies {
compile "org.clojure:clojure:1.6.0"
}
您可以修改gradle源代码集或移动hello/core。clj
到src/main/clojure
默认情况下gradle会在其中查找源。通过这些更改,jar文件被生成,并且可以在提供有效的cp时运行——我没有安装clojure,所以无法轻松检查它。
编辑
这里可以找到一个示例项目,它包含了我介绍的所有更改。它还生成带有shadowJar
任务的uber jar,该任务内置clojure依赖项,并可以启用hello。要使用以下命令运行的核心
:
java -cp build/libs/29015575-all.jar hello.core
编辑2
现在,github示例生成了可运行的jar。
源代码应该位于./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
{
manifest.attributes("Main-Class": "hello.core")
}
我不确定设置是否十分必要gradlejar
将生成jar文件。
这是运行代码的命令:
java -cp .:<PATH>/clojure-1.6.0.jar:build/libs/clojure_test.jar hello.core
需要进行三个修改:来自https://github.com/DevonStrawn/Clojuresque-Boilerplate/blob/master/UberJar/build.gradle.
uberjar
{
manifest.attributes("Main-Class": "hello.core")
}
apply plugin: 'application'
uberjar.enabled = true
现在只需要一个罐子就可以执行了
clojure_test> java -jar build/libs/clojure_test-standalone.jar
Hello, World!
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的回答中,我添加了创建阴影罐的gradle脚本。它包含设置Main类的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"
}
或者使用这两行代码来代替清单更改代码:
apply plugin: 'application'
mainClassName = 'hello.core'
去拿ubjer罐子
gradle shadow
它和uberjar一样。
clojure_test> java -jar build/libs/clojure_test-all.jar
Hello, World!
问题内容: 我是Gradle新手。我想构建一个uberjar(AKA fatjar),其中包括项目的所有传递依赖项。我需要在“ build.gradle”中添加哪些行? 这是我目前拥有的:(我是从几天前的某个地方复制的,但是不要从那里收集。) 问题答案: 您是否尝试过 gradle食谱中 的fatjar示例? 您正在寻找的是gradle 的影子插件
问题内容: 是否有任何Gradle教程或插件显示如何借助Gradle构建来构建/分发Eclipse插件? Somethig类似于Maven的Tycho项目:http ://eclipse.org/tycho/ ? 问题答案: 我不知道是否存在与Tycho相当的插件。请参阅此Gradle论坛条目以获取相关讨论。
我尝试使用gradle构建工具构建一个简单的android应用程序。但是我得到了这样的错误 方法无签名:org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.compile()适用于参数类型:(java.lang.String)值:[org.gradle.api.plugins: gradle and
问题内容: 我正在尝试从build.gradle文件中运行Groovy类。我遵循使用指南中的指示,但是出现错误。 构建文件为: 常规类很简单: 但是,当我尝试运行gradlew编译fooTask时,出现以下错误: 无法解析类groovyClass 知道为什么吗? 谢谢 问题答案: 如果要从构建中引用它,则需要添加该类(而不是在简单的Exec任务中)。给定此目录结构: 在哪里: 并且是: 然后,运行
问题内容: 我正在使用gradle构建的开源项目。我想生成一个(project)-sources.jar文件,可以将其加载到我的IDE(IntelliJ IDEA)中并通过该项目进行调试。我知道如何生成文件(如果可以生成的话)。 我浏览了该项目可用的gradle任务,但没有一个可以生成source jar文件。 为该项目生成源jar文件的最简单方法是什么? 将源添加到包含已编译的类文件的jar文件
我试图在Eclipse的Java中构建一个Apache Spark应用程序。我使用Gradle作为我的构建管理系统。我应该在中写什么?我应该使用哪些gradle命令来做这个Maven POM和终端命令所做的同样的事情? 和