указать класс Kotlin в качестве точки входа основного класса в MANIFEST.MF?

Как явно указать 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.


person Thufir    schedule 05.11.2017    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он кажется опечаткой/невоспроизводимым. Я попытался имитировать проект здесь - build.gradle (без сканирования сборки) и исходники котлина. Shadow jar имеет правильную запись Main-Class в моем случае. Похоже, у ОП есть еще одна проблема.   -  person madhead    schedule 05.11.2017
comment
Кроме того, согласно их документам: применение плагина приложения и настроек mainClassName автоматически настраивает атрибут Main-Class в манифесте для shadowJar.   -  person madhead    schedule 05.11.2017
comment
java -jar также работает: ./gradlew clean assemble && java -jar build/libs/kotlinAdder.jar печатает Hello, world!   -  person madhead    schedule 05.11.2017
comment
@madhead хорошо, ну не знаю. работает отлично. github.com/THUFIR/kotlin спасибо :)   -  person Thufir    schedule 05.11.2017