Gradle-如何从可执行jar中排除资源?

Gradle-如何从可执行jar中排除资源?,gradle,jar,logback,Gradle,Jar,Logback,我在src/main/resources下有一个“生产”logback配置文件logback.xml。。。但该目录还包含“testing”logback配置文件logback-test.xml(logback首先查找该文件) 创建可执行jar时,我想删除“测试”xml文件 我试过这个 jar { manifest { // PS this is the correct line for Shadow Plugin... attributes 'Class-

我在src/main/resources下有一个“生产”logback配置文件logback.xml。。。但该目录还包含“testing”logback配置文件logback-test.xml(logback首先查找该文件)

创建可执行jar时,我想删除“测试”xml文件

我试过这个

jar {
    manifest {
        // PS this is the correct line for Shadow Plugin...
        attributes 'Class-Path': '/libs/a.jar'
        attributes 'Main-Class': 'core.MyMainClass'
    }
    exclude("**/resources/*test*")
}
我试过这个

jar {
    manifest {
        attributes 'Class-Path': '/libs/a.jar'
        attributes 'Main-Class': 'core.MyMainClass'
    }
    doLast {
        exclude("**/resources/*test*")
    }
}
。。。我做错了什么

以后

我发现将这些XML放在/src/main/resources下可能会让我的生活变得困难。。。因此,我在src下创建了一个新目录/logback,并将文件放在其中。我通过以下操作将其添加到类路径(正如logback所说,它在其中查找这些文件):

test {
    classpath += files( 'src/logback' )
}
有趣的是,这意味着测试期间的日志记录是正常的,这足以让生成的可执行jar在运行时使用logback OK

不幸的是,像这样配置“shadowJar”
任务

shadowJar {
     baseName = 'DocumentIndexer'
     classifier = null
     version = project.version
     exclude("logback/*test*")
}
或者像这样配置“jar”
任务

jar {
    manifest {
        attributes 'Class-Path': '/libs/a.jar'
        attributes 'Main-Class': 'core.ConsoleIOHandler'
    }
    exclude("logback/*test*")
}
。。。只是拒绝工作:logback-test.xml文件仍然在jar中。

我从gradle.org的论坛上获得

基本答案是,“test”logback配置文件应该放在src/test/resources下,“production”配置文件应该放在src/main/resources下。这样,前者将被排除在jar之外

回答者还说“资源”是指定相对路径的根之一。

我从gradle.org的论坛上得到

configurations {
    provided
    compile.extendsFrom provided
}

dependencies {
    provided 'WHATEVER' // Packages you don't need to add to jar
    provided 'Other WHATEVER' // Packages you don't need to add to jar

    shadow 'OTHER' // Packages you need to add to jar
    shadow 'Another OTHER' // Packages you need to add to jar
}

shadowJar {
    configurations = [project.configurations.shadow] // ***
}
基本答案是,“test”logback配置文件应该放在src/test/resources下,“production”配置文件应该放在src/main/resources下。这样,前者将被排除在jar之外

回答者还说,“资源”是指定相对路径的根之一

configurations {
    provided
    compile.extendsFrom provided
}

dependencies {
    provided 'WHATEVER' // Packages you don't need to add to jar
    provided 'Other WHATEVER' // Packages you don't need to add to jar

    shadow 'OTHER' // Packages you need to add to jar
    shadow 'Another OTHER' // Packages you need to add to jar
}

shadowJar {
    configurations = [project.configurations.shadow] // ***
}
如上所述

第***行是告诉shadow在jar中包含哪些依赖项的方法

如上所述

第***行是告诉shadow在jar中包含哪些依赖项的方法