【问题标题】:Gradle - how do I exclude a resource from the executable jar?Gradle - 如何从可执行 jar 中排除资源?
【发布时间】:2017-01-18 21:32:51
【问题描述】:

我在 src/main/resources 下有一个“生产”logback 配置文件 logback.xml...但该目录还包含“测试”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*")
    }
}

...我做错了什么?

稍后

我发现here 可能让我自己很难将这些 xml 放在 /src/main/resources 下...所以我在 src 下创建了一个新目录 /logback,然后将文件放在那里.我通过这样做将它添加到类路径中(因为 logback 说这是它查找这些文件的地方):

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

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

不幸的是,像这样配置“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 中。

【问题讨论】:

    标签: gradle jar logback


    【解决方案1】:

    我从 gradle.org 的论坛收到了 the answer

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

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

    【讨论】:

      【解决方案2】:
      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 *** 是告诉 shadow 在 jar 中包含哪些依赖项的方式

      【讨论】:

        猜你喜欢
        • 2020-04-11
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        • 2011-05-06
        相关资源
        最近更新 更多