如何通过 Gradle 7.0+ 制作具有依赖项的 Jar 文件?

ken*_*984 8 java dependencies jar gradle build.gradle

我目前jarbuild.gradle情况如下:

jar {
manifest {
    attributes "Main-Class": "hoge.Main"
}
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
Run Code Online (Sandbox Code Playgroud)

并且运作良好。

但是,我收到了来自 Gradle 的消息(可能从 6 岁以上开始?)

这是实际的消息:

The compile configuration has been deprecated for dependency declaration. This will fail with an error in Gradle 7.0. Please use the implementation configuration instead.
Run Code Online (Sandbox Code Playgroud)

该部分configurations.compile已弃用。

我怎样才能更新它?

如果我变了

jar {
manifest {
    attributes "Main-Class": "hoge.Main"
}
    from configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) }
}
Run Code Online (Sandbox Code Playgroud)

摇篮 说 > Resolving configuration 'implementation' directly is not allowed

And*_*rei 7

对于其他人希望他们的摇篮配置升级到7.0或更高版本的格式,需要注意的是简单地更换compileimplementationapi可能会错误,如果你使用的java插件。您需要使用该java-library插件。文档

确保在您的gradle.config替换中:

apply plugin: 'java'
Run Code Online (Sandbox Code Playgroud)

和:

apply plugin: 'java-library'
Run Code Online (Sandbox Code Playgroud)

implementation用于非传递依赖项和传递依赖项api(如果依赖项由项目的依赖项直接使用)。


sma*_*c89 6

compile配置已被弃用,取而代之的是implementation.

请参阅文档

  • 我知道这。我询问如何更新我的代码以应对弃用。 (3认同)
  • 是的谢谢你,但是当我这样做时,我有“不允许直接解析配置‘实现’” (2认同)

Lou*_*met 6

您需要根据您的情况替换compileruntimeClasspath

在以前的 Gradle 版本中,compile有太多的责任:

  • 声明依赖
  • 解析为编译类路径
  • 暴露于消费项目

它已经被implementationfor 依赖声明取代,它也需要被某些东西取代以解决问题。

但是,在您的情况下,您很可能希望打包运行时依赖项而不是编译依赖项。因此,您应该使用runtimeClasspath作为要解决的配置。而不是compileClasspath哪个不包含任何runtimeOnly依赖项。