使用 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 中排除文件的主要内容,如果未能解决你的问题,请参考以下文章
spring boot使用gradle打包怎么样排除指定jar包