ProGuard issue after upgrade to Plugin 2.8.0: "Input doesn't contain any classes" error with same config

Issue:
Upgraded plugin from version 2.5.0 to 2.8.0 using the same configuration, but now encountering an error:

The input doesn't contain any classes. Did you specify the proper '-injars' options?

Configuration snippet:

configuration("proguard-project.txt")

verbose()

val javaHome = System.getProperty("java.home")
File("$javaHome/jmods/").listFiles()!!
    .forEach { libraryjars(it.absolutePath) }

injars(composedJar.flatMap {
    it.archiveFile
})
outjars(layout.buildDirectory.file("libs/${project.name}-${project.version}-obfuscated.jar"))

libraryjars(configurations.compileClasspath.get())

printmapping(
    "build/obfuscated/output/${properties("pluginName")}-${
        properties("pluginVersion")
    }-ProGuard-ChangeLog.txt"
)

target(properties("pluginVersion"))

Problem details:
After upgrading, ProGuard reports that the input doesn’t contain any classes and suggests checking the -injars options. The configuration and inputs have not changed otherwise.

Request:
Has anyone encountered this issue after upgrading to version 2.8.0? Any suggestions or known fixes would be appreciated.

I’m using .map, not flatMap.

No problem with plugin version 2.8.0.

Thanks buddy. it’s been weird i’m getting same issue by .map as well.

My config, just in case:

tasks {
    val proguardJar = layout.buildDirectory.file("libs/$name-$myReleaseVersion-obfuscated.jar")

    val proguard by registering(ProGuardTask::class) {
        injars(composedJar.map { it.archiveFile })
        outjars(proguardJar)

        val javaVersion = JavaVersion.toVersion(pluginJavaVersion)
        val javaToolchainService = project.extensions.getByType(JavaToolchainService::class.java)
        val javaLanguageVersion = JavaLanguageVersion.of(javaVersion.majorVersion.toInt())
        val javaInstallationPath = javaToolchainService.launcherFor {
            languageVersion.set(javaLanguageVersion)
        }.get().metadata.installationPath
        libraryjars(file("$javaInstallationPath/jmods"))
        libraryjars(configurations.compileClasspath.get())

        target(pluginJavaVersion)
        printmapping(layout.buildDirectory.file("distributions/$myPluginName-$myReleaseVersion-mapping.txt").get().asFile)

        // https://www.guardsquare.com/manual/configuration/usage
        adaptresourcefilecontents("**.xml")
        dontshrink()
        dontoptimize()
        renamesourcefileattribute("SourceFile")
        overloadaggressively()

        // exclude settings services
        keep("class **Settings**Service { *;} ")
        // exclude persisted types
        keep("class **Model { *;} ")
        keep("class **ModelCondition { *;} ")
        keep("class **ToolwindowOverride { *;} ")
        keep("enum * { *; }")

        keepclassmembers("class ** extends com.intellij.codeInspection.LocalInspectionTool { <fields>; }")
            
        // https://www.guardsquare.com/manual/configuration/attributes
        keepattributes("*Annotation*,ConstantValue,EnclosingMethod,InnerClasses,LineNumberTable,Signature,SourceFile")
    }
...
    prepareSandbox {
        pluginJar = proguardJar
        dependsOn(proguard)
        ...
    }
val proguard by registering(ProGuardTask::class) {

    configuration("proguard-project.txt")

    verbose()

    val javaHome = System.getProperty("java.home")
    File("$javaHome/jmods/").listFiles()!!
        .forEach { libraryjars(it.absolutePath) }


    injars(composedJar.map { it.archiveFile })
    outjars(layout.buildDirectory.file("libs/${project.name}-${project.version}-obfuscated.jar"))

    libraryjars(configurations.compileClasspath.get())

    printmapping(
        "build/obfuscated/output/${properties("pluginName")}-${
            properties(
                "pluginVersion"
            )
        }-ProGuard-ChangeLog.txt"
    )

    target(properties("pluginVersion"))
}

my config above. and same issue by your config as well. just guessing that some libs may confilict maybe. will take some time to figure out. and thanks for your help!

Root cause identified:

The IntelliJ Platform Gradle Plugin changed behavior between 2.5.0 and 2.10.5:

  • v2.5.0 (old): composedJar bundled all submodule classes → 870 entries (1.4MB)
  • v2.10.5 (new): composedJar only contains plugin descriptor → 4 entries (5KB)

The new version keeps pluginModule() JARs separate instead of bundling them.

// Include root project's composedJar (contains plugin.xml)
injars(composedJar.flatMap { it.archiveFile })

// Include all submodule composedJars (contain actual classes)
// In intellij-platform plugin 2.10+, pluginModule() JARs are kept separate
project(":intellij-plugin").tasks.named<ComposedJarTask>("composedJar").let {
    dependsOn(it)
    injars(it.flatMap { jar -> jar.archiveFile })
}
project(":extensions:git").tasks.named<ComposedJarTask>("composedJar").let {
    dependsOn(it)
    injars(it.flatMap { jar -> jar.archiveFile })
}
project(":extensions:java").tasks.named<ComposedJarTask>("composedJar").let {
    dependsOn(it)
    injars(it.flatMap { jar -> jar.archiveFile })
}
project(":extensions:kotlin").tasks.named<ComposedJarTask>("composedJar").let {
    dependsOn(it)
    injars(it.flatMap { jar -> jar.archiveFile })
}

Root cause: In intellij-platform plugin 2.10.5, when using pluginModule(), each submodule’s JAR is kept separate. The root project’s composedJar only contains metadata (plugin.xml), not the actual classes. In 2.5.0, it bundled everything together.

Fix applied (build.gradle.kts):

  1. Added import for ComposedJarTask
  2. Modified the ProGuard task to include all submodule composedJar outputs:
    • :intellij-plugin:composedJar
    • :extensions:git:composedJar
    • :extensions:java:composedJar
    • :extensions:kotlin:composedJar

Result:

Version Root JAR Obfuscated JAR
2.5.0 (old) 1.46MB (bundled) 1.26MB ✓
2.10.5 (before fix) 5KB (empty) :cross_mark: Error
2.10.5 (after fix) 5KB (metadata) 1.26MB ✓
// Use pluginComposedModule for intellij-plugin to bundle into main JAR
// This allows xi:include to resolve META-INF files across modules
// https://github.com/JetBrains/intellij-platform-gradle-plugin/blob/main/CHANGELOG.md
// 2.7.0 - 2025-07-26
// Breaking Changes
// pluginModule(Dependency) dependency helper no longer bundles module into the main plugin jar, use pluginComposedModule(Dependency) instead.
pluginComposedModule(implementation(project(":intellij-plugin")))
pluginComposedModule(implementation(project(":extensions:git")))
pluginComposedModule(implementation(project(":extensions:kotlin")))
pluginComposedModule(implementation(project(":extensions:java")))
1 Like