Как явно указать shadowJar
использовать файл Kotlin в качестве точки входа для результирующего uberJar
? (Или жирный JAR
, как вам больше нравится.)
неуклюже редактируя META-INF/MANIFEST.MF
и заменяя его в zip-файле (использовал графический интерфейс, чтобы вернуть его):
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ ll
total 900
drwxrwxr-x 2 thufir thufir 4096 Nov 5 03:42 ./
drwxrwxr-x 8 thufir thufir 4096 Nov 5 03:42 ../
-rw-rw-r-- 1 thufir thufir 903184 Nov 5 03:42 kotlinAdder.jar
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ jar xf kotlinAdder.jar
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ ll
total 928
drwxrwxr-x 7 thufir thufir 4096 Nov 5 03:42 ./
drwxrwxr-x 8 thufir thufir 4096 Nov 5 03:42 ../
drwxrwxr-x 2 thufir thufir 4096 Nov 5 03:42 demo/
drwxrwxr-x 17 thufir thufir 12288 Nov 5 03:42 kotlin/
-rw-rw-r-- 1 thufir thufir 903184 Nov 5 03:42 kotlinAdder.jar
drwxrwxr-x 3 thufir thufir 4096 Nov 5 03:42 META-INF/
drwxrwxr-x 3 thufir thufir 4096 Nov 5 03:42 net/
drwxrwxr-x 4 thufir thufir 4096 Nov 5 03:42 org/
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ nano META-INF/MANIFEST.MF
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Main-Class: net.bounceme.dur.kotlin.App
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ nano META-INF/MANIFEST.MF
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Main-Class: demo.MainKt
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
thufir@dur:~/NetBeansProjects/kotlin/build/libs$ java -jar kotlinAdder.jar
Hello, world!
thufir@dur:~/NetBeansProjects/kotlin/build/libs$
Успех своего рода. Он запускал класс Kotlin, как и предполагалось.
проект:
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ │ └── net
│ │ └── bounceme
│ │ └── dur
│ │ └── kotlin
│ │ └── App.java
│ └── kotlin
│ └── demo
│ ├── example.kt
│ └── main.kt
└── test
└── java
13 directories, 9 files
файл сборки:
plugins {
id 'com.gradle.build-scan' version '1.8'
// id 'java'
id 'application'
id "org.jetbrains.kotlin.jvm" version "1.1.51"
id 'com.github.johnrengelman.shadow' version '2.0.1'
}
buildScan {
licenseAgreementUrl = 'https://gradle.com/terms-of-service'
licenseAgree = 'yes'
//publishAlways()
}
configurations {
provided
}
shadowJar {
baseName = 'kotlinAdder'
classifier = null
version = null
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
//mainClassName = 'net.bounceme.dur.kotlin.App'
mainClassName = 'demo.MainKt'
repositories {
jcenter()
}
configurations {
provided
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51"
compile 'com.google.firebase:firebase-auth:11.4.2'
}
Как мне сказать Gradle продолжать использовать shadowJar
, но построить MANIFEST.MF
как отредактированный вручную, чтобы явно установить Main-Class: demo.MainKt
в качестве точки входа.
В противном случае код Java запускается по умолчанию даже, когда я явно установил точку входа как выше в файле build.gradle
.
build.gradle
(без сканирования сборки) и исходники котлина. Shadow jar имеет правильную записьMain-Class
в моем случае. Похоже, у ОП есть еще одна проблема. - person madhead   schedule 05.11.2017java -jar
также работает:./gradlew clean assemble && java -jar build/libs/kotlinAdder.jar
печатаетHello, world!
- person madhead   schedule 05.11.2017