Building a self-executable jar with Gradle and Kotlin
Solution 1:
Add the plugin application
, then set the mainClassName
as
mainClassName = '[your_namespace].[your_arctifact]Kt'
For instance, suppose you have placed the following code in a file named main.kt
:
package net.mydomain.kotlinlearn
import kotlin
import java.util.ArrayList
fun main(args: Array<String>) {
println("Hello!")
}
your build.gradle
should be:
apply plugin: 'kotlin'
apply plugin: 'application'
mainClassName = "net.mydomain.kotlinlearn.MainKt"
In fact Kotlin is building a class to encapsulate your main function named with the same name of your file - with Title Case.
Solution 2:
I've found the workaround (thanks to MkYong website)
- The gradle script needed the kotlin-compiler artifact as a dependency
- The gradle script needed a way to collect all kotlin files and put them into the jar.
So i get with the following gradle script :
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.1-2'
}
}
apply plugin: "kotlin"
repositories {
mavenCentral()
}
dependencies {
compile 'org.jetbrains.kotlin:kotlin-stdlib:1.0.1-2'
}
jar {
manifest {
attributes 'Main-Class': 'com.loloof64.kotlin.exps.MultideclarationsKT'
}
// NEW LINE HERE !!!
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}