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

时间:2017-01-18 21:32:52

标签: gradle jar logback

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

创建可执行jar时,我想删除“testing”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*")
    }
}

......我做错了什么?

稍后

我发现here我可能在将这些xmls放在/ src / main / resources下时让自己变得很难...所以我在src,/ logback下创建了一个新目录,并将文件放入相反。我通过这样做将此添加到类路径中(因为logback说它是查找这些文件的位置):

test {
    classpath += files( 'src/logback' )
}

有趣的是,除了意味着测试期间的日志记录发生正常,这足以让生成的可执行jar在运行时使用logback OK。

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

shadowJar {
     baseName = 'DocumentIndexer'
     classifier = null
     version = project.version
     exclude("logback/*test*")
}

或像这样配置“jar”task

jar {
    manifest {
        attributes 'Class-Path': '/libs/a.jar'
        attributes 'Main-Class': 'core.ConsoleIOHandler'
    }
    exclude("logback/*test*")
}

...只是拒绝工作:文件logback-test.xml仍然在jar中。

2 个答案:

答案 0 :(得分:0)

我从gradle.org的论坛得到the answer

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

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

答案 1 :(得分:0)

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] // ***
}

here

line ***是告诉影子jar中要包含哪些依赖项的方法