Al crear un jar a partir de mi código Kotlin y ejecutarlo, dice "Sin atributo de manifiesto principal". Al mirar el manifest.mf, tiene este contenido:
Manifest-Version: 1.0Al mirar el archivo en la fuente, tiene este contenido:
Manifest-Version: 1.0 Main-Class: MyMainClassAl copiar manualmente el manifiesto de origen en el contenedor, funciona perfectamente.
Recibí este error con Gradle y Kotlin. Tuve que agregar en mi build.gradle.kts un atributo de manifiesto explícito:
tasks.withType<Jar> { manifest { attributes["Main-Class"] = "com.example.MainKt" } } De la documentación de gradle , es mejor crear una tarea fatJar para englobar todas las dependencias de tiempo de ejecución en caso de que encuentre errores java.lang.NoClassDefFoundError
Si alguno de los archivos jar dependientes tiene un archivo MANIFEST.MF , anulará el archivo personalizado que define la Main-Class .
Para solucionar este problema, debe hacer lo siguiente:
META-INF/MANIFEST.MF sea el primero en la listaMANIFEST.MF personalizado y lo mostrará para el artefacto jar .Consulte el problema relacionado para obtener más detalles.
También puede usar Gradle o Maven para generar el fat jar en su lugar.
1. Agregue la siguiente definición de tarea en el script de compilación
tasks.jar { manifest { attributes["Main-Class"] = "MainKt" } configurations["compileClasspath"].forEach { file: File -> from(zipTree(file.absoluteFile)) } }