Add classpath in manifest using Gradle

Found a solution on Gradle's forum:

jar {
  manifest {
    attributes(
      "Class-Path": configurations.compile.collect { it.getName() }.join(' '))
  }
}

Source: Manifest with Classpath in Jar Task for Subprojects


In the latest versions of gradle, compile and runtime becomes deprecated. Instead, use runtimeClasspath as follows:

'Class-Path': configurations.runtimeClasspath.files.collect { it.getName() }.join(' ')

EDIT:

Note that if you are using Kotlin DSL, you can configure the manifest as follows:

configure<JavaPluginConvention> {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    manifest {
        attributes(
                "Manifest-Version" to "1.0",
                "Main-Class" to "io.fouad.AppLauncher")
    }
}

tasks.withType(Jar::class) {
    manifest {
        attributes["Manifest-Version"] = "1.0"
        attributes["Main-Class"] = "io.fouad.AppLauncher"
    }
}

Tags:

Java

Gradle