如何使用Gradle将jar中的所有文件包含到war中

如何使用Gradle将jar中的所有文件包含到war中,gradle,war,Gradle,War,我在尝试插件: io.freefair.war-overlay-但它只是将一场战争叠加到另一场战争上 waroverlay-它有适当的选项“includeArjars true”,但是 不适合我 目前我正在尝试编写脚本: dependencies { /* jar, his files I would like to include in war */ compile project(':my_jar_1') } war { /* Step 1. Copy all

我在尝试插件:

  • io.freefair.war-overlay-但它只是将一场战争叠加到另一场战争上
  • waroverlay-它有适当的选项“includeArjars true”,但是 不适合我
目前我正在尝试编写脚本:

dependencies {
    /* jar, his files I would like to include in war */
    compile project(':my_jar_1')
}

war {

    /* Step 1. Copy all from my_jar_1 into WEB-INF/classes */

    into('WEB-INF/classes') {
        from configurations.compile
                .filter { it.name.startsWith("my_jar_1") }
                .collect { zipTree(it).matching { exclude 'META-INF/**/*.*' }}
    }

    /* Step 2. Deleting jar from war WEB-INF/lib. I got stuck here. It println, but doesn't delete jar */

    doLast {
        zipTree('build/libs/war_1-0.0.0.war').files.each {
            if (it.path.endsWith('.jar')) {
                delete it
                println 'DELETED ' + it.path
            }
        }
    }
}
有人能告诉我怎么做吗? 或者smb知道更优雅的解决方案

我还试图声明我自己的配置

configurations { overlay }
dependencies { 
    overlay project(':my_jar_1') 
}
war {
        into('WEB-INF/classes') {
            from configurations.overlay
            ...
但它显示出错误

失败:生成失败,出现异常

  • 错误:在最新检查期间未能捕获任务“war”属性“rootSpec$1$1”的输入文件的快照。 无法为文件“/home/user/projects/OveralJarToWar/my_jar_1/build/libs/my_jar_1-1.0-SNAPSHOT.jar”创建MD5哈希


WEB-INF/lib
WEB-INF/classes
的内容由
war
任务的单个属性
classpath
配置。根据文件:

此类路径中的任何JAR或ZIP文件都包含在WEB-INF/lib目录中。此类路径中的任何目录都包含在WEB-INF/classes目录中

因此,在您的情况下,类路径应该修改如下

war {
    def myJar = project(':my_jar_1').jar.outputs
    def myClassesAndResources = project(':my_jar_1').sourceSets.main.output
    classpath = classpath - myJar + myClassesAndResources
}

谢谢,这正是我想要的,但是“-myJar”不起作用,它已经由providedCompile解决了