Building a self-executable jar with Gradle and Kotlin
None of the above solution worked for me while building Artifact.
IDE version IntelliJ IDEA 2019.1.1
.
To fix the issue, do the following
Steps
Step 1 - Create Artifact
Go to File -> Project Structure -> Artifacts
Click the
+
->JAR
->From modules with dependencies
- Select your program's
Main Class
Step 2 - Change MANIFEST Path
Change value of
Directory for META-INF/MANIFEST.MF
to your project root.For example , from
/your/project/directory/src/main/kotlin
to/your/project/directory
- Press
OK
,then PressApply
andOK
.
Step 3 - Build Artifact
- Finally, Go to
Build
->Build Artifacts
->[your-artifact-name]
->Build
.
The generated JAR
file can be found in the out/artifact/[your-artifact-name]
directory. (y)
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.
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) } }
}