proguard-maven-plugin icon indicating copy to clipboard operation
proguard-maven-plugin copied to clipboard

'ClassNotFoundException: kotlinx.metadata.jvm.KmModuleVisitor' when using proguard option '-keepkotlinmetadata'

Open adirubin opened this issue 3 years ago • 1 comments

Hi, I tried to use the plugin with the proguard option '-keepkotlinmetadata' and got this exception:

 [proguard] Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/metadata/jvm/KmModuleVisitor
 [proguard] 	at proguard.resources.kotlinmodule.io.KotlinModuleDataEntryReader.read(KotlinModuleDataEntryReader.java:49)
 [proguard] 	at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:85)
 [proguard] 	at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:85)
 [proguard] 	at proguard.io.RenamedDataEntryReader.read(RenamedDataEntryReader.java:97)
 [proguard] 	at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:85)
 [proguard] 	at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:85)
 [proguard] 	at proguard.io.JarReader.read(JarReader.java:84)
 [proguard] 	at proguard.io.DirectorySource.readFiles(DirectorySource.java:68)
 [proguard] 	at proguard.io.DirectorySource.pumpDataEntries(DirectorySource.java:54)
 [proguard] 	at proguard.InputReader.readInput(InputReader.java:262)
 [proguard] 	at proguard.InputReader.readInput(InputReader.java:230)
 [proguard] 	at proguard.InputReader.readInput(InputReader.java:207)
 [proguard] 	at proguard.InputReader.execute(InputReader.java:135)
 [proguard] 	at proguard.ProGuard.readInput(ProGuard.java:283)
 [proguard] 	at proguard.ProGuard.execute(ProGuard.java:108)
 [proguard] 	at proguard.ProGuard.main(ProGuard.java:677)
 [proguard] Caused by: java.lang.ClassNotFoundException: kotlinx.metadata.jvm.KmModuleVisitor
 [proguard] 	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
 [proguard] 	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 [proguard] 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

It seems that proguard's kotlin library dependencies are missing from the classpath. According to proguard-core's gradle file, they should be:

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}"
    compile "org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion}"
    compile "org.jetbrains.kotlinx:kotlinx-metadata-jvm:${kotlinxMetadataVersion}"
}

with these versions: kotlinVersion = 1.3.31 kotlinxMetadataVersion = 0.1.0

Here is an example config: proguard_plugin_bug.tar.gz To reproduce, just run mvn install

I'll be glad for a solution or a workaround. Thanks! Adi

adirubin avatar Jan 19 '21 20:01 adirubin

I guess https://github.com/wvengen/proguard-maven-plugin/blob/master/src/main/java/com/github/wvengen/maven/proguard/ProGuardMojo.java#L947 does not add the transitive dependencies from proguard-core to these Kotlin dependencies.

lasselindqvist avatar Jan 20 '21 17:01 lasselindqvist