New Gradle Users
Initializing a project
$ mkdir my-project $ cd my-project $ gradle init --type basic --dsl groovy
Also see Gradle’s Learning the Basics.
Adding the plugin
To include plugins from Gradle’s Plugin Portal you’ll use a plugins {}
block. This should be at the top of your build.gradle
.
plugins {
id 'dev.clojurephant.clojure' version '0.7.0'
// any additional plugins declared here
}
Also see Gradle’s Using Plugins.
Configuring project information
group = 'my.example' // the group ID your artifacts should be published under
version = '0.1.0-SNAPSHOT' // the version your artifacts should be published under
Define dependencies
Repositories
No repositories are specified by default, so you must list any repositories you want to search for your dependencies.
Clojure projects commonly need both Maven Central and Clojars.
repositories {
mavenCentral()
maven {
name = 'Clojars' // name can be ommitted, but is helpful in troubleshooting
url = 'https://repo.clojars.org/'
}
}
Also see Gradle’s Declaring Repositories.
Dependencies
Unless you have a reason to do otherwise, use Gradle’s shorthand syntax <configuration> '<group>:<artifact>:<version>'
(e.g. implementation 'org.clojure:clojure:1.9.0'
) to specify dependencies.
Dependencies are put in different configurations (somewhat similar to Maven scopes). For Clojure’s purposes, the three main ones to be aware of are:
-
implementation
- dependencies of your main application code -
testImplementation
- dependencies of your test code -
devImplementation
- dependencies used only in the REPL
dependencies {
implementation 'org.clojure:clojure:1.11.1'
// due to how clojure.test is executed, a JUnit test engine (Jovial) is needed
testRuntimeOnly 'org.ajoberstar:jovial:0.3.0'
// due to the way Gradle's REPL is started, if you need tools.namespace, you must be on 0.3+
devImplementation 'org.clojure:tools.namespace:1.3.0'
}
// due to how clojure.test is executed, the JUnit platform is needed
tasks.withType(Test) {
useJUnitPlatform()
}
Also see Gradle’s Declaring Dependencies
Putting it all together
Full build.gradle
example:
plugins {
id 'dev.clojurephant.clojure' version '0.7.0'
}
group = 'my.example'
version = '0.1.0-SNAPSHOT'
repositories {
mavenCentral()
maven {
name = 'Clojars' // name can be ommitted, but is helpful in troubleshooting
url = 'https://repo.clojars.org/'
}
}
dependencies {
implementation 'org.clojure:clojure:1.11.1'
testRuntimeOnly 'org.ajoberstar:jovial:0.3.0'
devImplementation 'org.clojure:tools.namespace:1.3.0'
}
tasks.withType(Test) {
useJUnitPlatform()
}