如何使用Gradle 7.0+制作带有依赖项的Jar文件?

15

我目前在build.gradle中的jar如下所示:

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

并且运行良好。

然而,我收到了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.

部分 configurations.compile 已被弃用。

我该如何更新它?

如果我更改了

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

Gradle提示> 直接解析“implementation”配置不被允许

4个回答

12

在您的情况下,您需要将compile替换为runtimeClasspath

在以前的Gradle版本中,compile负责的职责过多:

  • 声明依赖项
  • 解析为编译类路径
  • 向消费项目公开

它已被implementation替换为依赖项声明,并且它也需要被某些东西所取代以进行解析。

但是在您的情况下,您最有可能想要打包运行时依赖项而不是编译依赖项。因此,您应该使用runtimeClasspath作为配置来进行解析,而不是compileClasspath,后者不会包含任何runtimeOnly依赖项。


11
对于其他希望将他们的Gradle配置升级到7.0+格式的人,请注意,仅仅用implementation或者api替换compile可能会出现问题,如果您使用java插件。您需要使用java-library插件。文档
请确保在您的gradle.config中替换:
apply plugin: 'java'

随着:

apply plugin: 'java-library'

您使用 implementation 来处理非传递性依赖项,而对于传递性依赖项(如果依赖项直接被项目的依赖方使用),则使用api


4

compile 配置已被弃用,推荐使用 implementation

请查看文档


4
我知道。我问如何更新我的代码以适应这一废弃的更改。 - kensuke1984
1
@kensuke1984 如何做到这一点是将所有使用compile的地方替换为implementation - smac89
3
谢谢您的选择。根据您提供的内容,我猜测您在进行某项操作时遇到了问题,具体是出现了"> Resolving configuration 'implementation' directly is not allowed"的提示。 - kensuke1984
@kensuke1984,您现在正在提出一个新问题。请参阅https://dev59.com/qVYN5IYBdhLWcg3wJFJm。 - smac89
从“编译”到“实现”是一个重大的变化。 - Vishwa Ratna
谢谢...https://imperceptiblethoughts.com/shadow/ 我终于使用它了。我想知道是否有简单的方法可以在不导入它的情况下完成这种事情。 - kensuke1984

0

可能会帮到其他人。通过使用java-library插件并按照https://docs.gradle.org/current/userguide/java_library_plugin.html中所述, 可以使其正常工作。 runtimeClassPath是不可消耗但可解析的。 可以像这样收集第一层依赖项: def firstLevelDepdendencies = project.configurations.runtimeClassPath.resolvedConfiguration.firstLevelModuleDependencies.collectMany { it.moduleArtifacts }.toSet()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接