首页 > 解决方案 > 如何仅将库中的特定 jar 包含到 gradle 构建中?

问题描述

我正在使用gradle V4.10.2eclipse构建WAR文件。我有一些JAR所有战争的通用文件。我需要它们仅在编译时使用,并且需要在构建WAR文件时排除它们。另外我不想排除所有的JARs 文件。

我已将所有 JAR 放在libs文件夹中。在build.gradle中,我只指定了要包含的 JAR。由于排除列表更大,因此包含我未使用的 JAR 列表exclude

war {
    rootSpec.include("**/test.jar")
}

以上结果是WAR没有META-INF文件夹的文件。因此,webapp 没有启动。reference lib我曾尝试像in那样添加库,eclipse但这会导致编译错误。

Execution failed for task ':compileJava'.
Compilation failed; see the compiler error output for details

所以我必须在 libs 文件夹中包含所有 JAR,然后只需要在构建的 WAR 中使用所需的 JAR。如何在构建中仅包含特定的 JAR?

标签: javagradleweb-applicationsjarbuild.gradle

解决方案


我强烈建议阅读有关使用 Gradle 构建 Java 项目的内容,尤其是有关Web 应用程序的部分

简而言之,您应该只将编译所需的 JAR 添加到compileOnly配置中,并将编译运行时所需的 JAR 添加到implementation配置中。然后 Gradle 将使用所有它们进行编译,并且仅在implementation打包 WAR 时将它们包含在内。

虽然您可以通过从libs文件夹中选择它们来做到这一点,但我强烈建议您移动到库及其来自存储库(私有或公共)的元数据,以便为您完成依赖管理。


推荐阅读