significado consentirlos abstenido gradle jar proguard kotlin shadowjar

gradle - consentirlos - abstenido significado



¿Qué son los archivos.kotlin_builtins y puedo omitirlos de mis uberjars? (2)

Estos archivos contienen datos para declaraciones de clases Kotlin estándar ("incorporadas") que no se compilan en archivos .class , sino que se asignan a los tipos existentes en la plataforma (en este caso, JVM). Por ejemplo, kotlin/kotlin.kotlin_builtins contiene la información para clases no físicas en el paquete kotlin : Int , String , Enum , Annotation , Collection , etc.

Hay dos escenarios principales cuando se usan estos archivos:

1) El compilador los busca desde kotlin-runtime en el classpath para determinar qué declaraciones incorporadas están disponibles.

2) La biblioteca de reflexión ( kotlin-reflect ) carga estos archivos como recursos para proporcionar capacidades de reflexión para las declaraciones integradas. Por ejemplo, String::class.members devuelve todos los miembros de la clase kotlin.String exactamente de la misma forma que el compilador de Kotlin ve esos miembros (a pesar de que no hay ningún archivo kotlin/String.class y se borra a java.lang.String in bytecode).

El primer punto claramente no es aplicable en su caso. Y si no usa la reflexión en las clases integradas, creo que es seguro excluir completamente los archivos .kotlin_builtins archivo jar resultante.

Estoy trabajando en la integración de proguard con mi build gradle para una aplicación escrita en Kotlin. Estoy descubriendo que proguard está eliminando la biblioteca estándar de Kotlin (como debería ser en mi sencillo programa Hello World) pero está dejando un montón de archivos en mi jar que tienen la extensión de archivo .kotlin_builtins . Cuando configuro mi tarea de gradle para excluir esos archivos, el programa todavía parece funcionar bien. ¿Qué son esos archivos y deben enviarse con mi ejecutable uberjar?

Aquí está mi contenido de build.gradle para referencia:

buildscript { ext.kotlin_version = ''1.0.5'' ext.shadow_version = ''1.2.4'' repositories { mavenCentral() maven { url "https://plugins.gradle.org/m2/" } flatDir dirs: "gradle/proguard" } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version" classpath ":proguard:" } } apply plugin: ''kotlin'' apply plugin: ''application'' apply plugin: ''com.github.johnrengelman.shadow'' mainClassName = ''namespace.MainKt'' defaultTasks ''run'' repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" testCompile "junit:junit:4.12" testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" } shadowJar { exclude ''kotlin/**/*.kotlin_builtins'' exclude ''.keep'' } task minify(type: proguard.gradle.ProGuardTask, dependsOn: ''shadowJar'') { libraryjars "${System.getProperty(''java.home'')}/lib/rt.jar" injars ''build/libs/artful-all.jar'' outjars ''build/libs/artful-all.out.jar'' printmapping ''build/libs/out.map'' keepclasseswithmembers ''public class * { / public static void main(java.lang.String[]); / }'' assumenosideeffects ''class kotlin.jvm.internal.Intrinsics { / static void checkParameterIsNotNull(java.lang.Object, java.lang.String); / }'' }