【问题标题】:log4j.properties gets overwritten when creating a "fat-JAR" using Gradle使用 Gradle 创建“fat-JAR”时,log4j.properties 会被覆盖
【发布时间】:2017-03-27 01:37:25
【问题描述】:

我的一个 Java 项目导出了一个可执行的“fat-JAR”文件以供部署。为了使用 Gradle 创建 JAR 文件,我按照here 中描述的说明进行操作:

task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': '<HUMAN_READABLE_TITLE_OF_YOUR_PACKAGE>',  
            'Implementation-Version': version,
            'Main-Class': '<PATH_TO_THE_MAIN_APPLICATION_CLASS>'
    }

    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

图示的任务将递归地遍历依赖关系树,如果需要解压缩 JAR,然后将所有内容压缩在一起。到目前为止唯一的问题是我的一些依赖项带有它们自己的log4.properties 文件,这些文件最终会覆盖我自己编写的文件。它们都位于各自资源folders 的同一级别中,因此当文件合并在一起时,后面的文件似乎会覆盖之前添加的文件。

到目前为止,我找到的唯一解决方案是使用命令行参数手动设置正确文件的路径。我最终希望能够执行 JAR 本身,而不需要额外的开销。

什么是保留我的log4.properties 并排除其他人被添加到包中的好方法?

【问题讨论】:

    标签: java gradle jar log4j


    【解决方案1】:

    您可以从要合并到构建 JAR 中的文件集合中排除该文件。

    from {
      configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    } {
      exclude "dir/subdir/the_file_to.exclude".
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 2017-06-07
      • 2011-05-14
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多