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

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

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

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

【问题讨论】:

    标签: java spring-boot gradle build.gradle gradle-plugin


    【解决方案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
    猜你喜欢
    • 2021-08-28
    • 2018-01-04
    • 1970-01-01
    • 2016-12-04
    • 2013-07-13
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多