首页 > 解决方案 > 撤消自定义 jar 任务中的文件排除

问题描述

我的 Gradle 文件中有一项特殊任务,用于创建可执行(或胖)jar。这个 jar 需要包含一个 slf4j 日志实现,以便在用户运行 jar 时会有一些输出。因此,我希望将 logback jar 和配置文件包含在可执行 jar 中。但是,我不希望其中任何一个出现在内置jar任务的输出中。

我能够在可执行 jar 中专门包含 logback jar。但是,我无法从库 jar 中排除 logback.xml 文件,而不会将其排除在可执行 jar 中。在 fatjar 任务中使用include("logback.xml")会导致输出 jar 仅包含 XML 文件而没有其他内容!

到目前为止,这是我的构建文件的相关部分:

dependencies {
    runtime group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}

task fatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'MyClass'
    }
    baseName = baseName + "-executable"
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
    // include('logback.xml') //FAIL!
}

jar {
    // clients should configure slf4j themselves
    exclude('logback.xml')
}

如何logback.xml从常规 jar 任务中排除但将其包含在fatJar任务中?

标签: javagradle

解决方案


推荐阅读