使用 Gradle 在清单中添加类路径

我希望我的Gradle构建脚本将完整的类路径添加到构建后创建的JAR文件中包含的清单文件中。

例:

Manifest-Version: 1.0
Class-Path: MyProject.jar SomeLibrary.jar AnotherLib.jar

我的构建脚本已经通过以下方式向清单添加了一些信息:

jar {
    manifest {
        attributes("Implementation-Title": project.name,
            "Implementation-Version": version,
            "Main-Class": mainClassName,
    }
}

如何获取要添加到清单的依赖项列表?


Java 教程的这一页更详细地描述了如何以及为何向清单添加类路径:将类添加到 JAR 文件的类路径


答案 1

在Gradle的论坛上找到了解决方案:

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

源:在子项目的 Jar 任务中使用类路径进行清单


答案 2

在最新版本的 gradle 中,并已弃用。相反,请按如下方式使用:compileruntimeruntimeClasspath

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

编辑:

请注意,如果您使用的是 Kotlin DSL,则可以按如下方式配置清单:

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"
    }
}

推荐