当前位置: 首页 > 知识库问答 >
问题:

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

司徒河
2023-03-14

我在src/main/resources下有一个“生产”日志返回配置文件logback.xml...但是该目录还包含“测试”日志返回配置文件log back-test . XML(log back首先查找该文件)。

创建可执行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/资源下...所以我在src,/logback下创建了一个新目录,并将文件放在那里。我通过执行以下操作将其添加到类路径中(正如logback所说,这是它查找这些文件的地方):

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

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

不幸的是,像这样配置“shadow jar”< code >任务

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

或者像这样配置“jar”< code > task :

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

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

共有2个答案

戴树
2023-03-14
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] // ***
}

正如这里提到的

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

柏修洁
2023-03-14

我从gradle.org的论坛上得到了答案。

基本的答案是,“测试”回溯配置文件应该放在src/test/resources下,而“生产”配置文件应该放在src/main/resources下。这样前者将被排除在罐子之外。

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

 类似资料:
  • 我正在尝试创建一个Jar用作Maven存储库 我已经构建了所有内容,所有类都准备好了。唯一的问题是gradlew./build包含了测试文件夹中的类和资源。我不希望这些作为jar的一部分,尤其是正在测试的资源文件。 因此,我的问题是,如何从jar构建任务中排除这些文件。我试过了 在我的身体里。格拉德尔:但那没用 我是Gradle和Maven的新手,所以任何洞察力都会有帮助。谢谢! 参考材料 bui

  • 我试图在Spring Boot+Gradle项目中构建一个可执行的jar,但目前没有任何工作。下面是最简单的结构。可能,Gradle配置中缺少一些东西。 格雷德尔: 主配置文件: 当我运行java-jar1.jar这样的jar文件时,出现了以下异常: 可能出了什么问题?

  • 如何用Gradle创建可执行JAR? 我尝试了,但它不起作用。

  • 在声纳分析中,我们有很多符号执行的异常(在这里描述)。据我所知,负责符号执行的规则是S2259和S2583,所以我创建了一个质量配置文件,排除了这些规则,但在声纳分析中仍然有excetpions。我们使用sonar-maven-plugin进行分析,我用sonar6.5和sonar6.7进行了测试。我如何将符号执行排除在分析之外。

  • 是否有一种方法可以使用Gradle从一组中排除特定的jar?我尝试了下面的代码,但这删除了该组的所有jar

  • gradle:如何排除重复的资源文件?例如。, META-INF/foo。在.././.下的xml/src/main/resources与src/main/resources/META-INF/foo同名。xml。 还尝试了: foo.xml文件都被排除在外。