使用 Gradle 从 jar 中排除文件

Posted

技术标签:

【中文标题】使用 Gradle 从 jar 中排除文件【英文标题】:Exclude file from jar using Gradle 【发布时间】:2019-04-23 00:09:03 【问题描述】:

我已经构建了一个 springboot jar,我想使用 gradle 从 fatjar 中排除所有 logback.xml。我已经尝试过以下方式。

jar
    exclude '/BOOT-INF/lib/**/logback.xml'

有人可以帮我如何使用 gradle 从依赖项中排除所有 logback.xml。

【问题讨论】:

【参考方案1】:

我个人认为“排除”事物是一种反模式。所以我会把你的问题抛在脑后,问“你什么时候需要包含这些文件?”目标是仅在需要时才包含一个额外的文件夹(而不包括不需要的文件夹)

如果文件仅用于测试,则应将文件移至 src/test/resources。如果是其他需要文件的任务,那么我建议您将文件移动到 src/xxx/resources 并将该文件夹仅添加到需要文件的任务中

按照惯例,src/main/resources 中的所有内容都放入 jar 中。在我看来,这是一个非常明智的约定。

【讨论】:

这是一个有趣的观点。我发现必须从构建中排除文件的需要是因为语言中存在“排除”一词,实际上支持一个名为“sourceSets”的部分,该部分允许“排除”选项。此外,我曾经使用过的所有其他 ide 都允许排除文件,突然之间它是一种反模式,我们不应该这样做,这似乎是一种耻辱。真的我只是想从构建中排除一个文件。 当然可以,而且是的,gradle 支持排除。在我看来,最好将事物分离到它们自己的文件夹中并仅在需要时包含它们。排除特定文件会变得混乱。团队中的新人更难理解“魔法”。您还必须小心在所有相关步骤/构建任务中始终排除文件【参考方案2】:

这取决于 xml 文件的保存位置。

您可以像下面这样尝试并相应地更改路径。

sourceSets  main  resources  exclude '**/*.xml'    

【讨论】:

我正在尝试从 jar 而不是我的 jar 资源文件中排除依赖资源【参考方案3】:

如果您不关心将 XML 文件从 src/main/resources 复制到 build/resources/main 文件夹(不只是在将 build/resources/main 复制到 War 时排除),您可以使用如下:

processResources 
    exclude('manual/*.xml')

查找更多信息here。

【讨论】:

我需要 src/main/resources 中的 logback.xml 文件,jat 的任何依赖项中都不需要 logback.xml

以上是关于使用 Gradle 从 jar 中排除文件的主要内容,如果未能解决你的问题,请参考以下文章

Gradle - 排除文件与 jar 打包

spring boot使用gradle打包怎么样排除指定jar包

在Gradle Android Studio中排除一个类文件

gradle 排除jar包依赖

从 Gradle 依赖项中排除 .class 文件

如何从 maven 项目中自动排除未使用的 jar 文件?