使用 War 插件但不创建存档

Using War plugin but without creating an archive

我正试图让 Gradle 处理非常大的 Web 应用程序的部署。过去,当我们使用 Ant 时,我们不会创建一个非常大的 .war 文件,我们只会 assemble 一个文件夹中的所有代码——库、.jsp 等—— - 然后将它们 scp 到部署目的地。这将加快部署速度,因为我们将只移动更改的文件。

不过,我在尝试使用 Gradle 时遇到了问题。使用 War 插件会创建一个实际的 .war 文件,这是我们不想要的。我试过简单地创建一个依赖 'classes' 并生成必要的 类 和资源文件夹的任务。但是,库依赖项在哪里?我怎样才能把所有这些都放在一个地方,这样我就可以做一个 scp 了?

当前版本:

apply plugin: "java"
apply plugin: "maven"
apply plugin: 'war'
apply plugin: 'eclipse-wtp'

sourceCompatibility = 1.6
targetCompatibility = 1.6

repositories {
    maven {
        url 'http://buildserver/artifactory/repo'
    }
}

sourceSets {
  main {
    java {
        srcDir 'src'
    }
    resources {
        srcDir 'src'
    }
  }
}

webAppDirName = 'web'
dependencies {

    compile 'antlr:antlr:2.7.6'
    compile 'antlr:antlr:2.7.7'
    *** etc ***

}

task deploystage(dependsOn: 'classes') << {
    println 'assemble and scp code here'

}

你的正确蛋白石...使用 War 插件并不容易...虽然如果它有一个 createExplodedWar 选项会很好。我只是使用了 Jar 插件方法。

.jars 以及 war.classpath.files 中的其他内容可用:

gradle.taskGraph.whenReady { TaskExecutionGraph taskGraph ->
    project.ext.set("allclasspathjars", files(war.classpath.files))
}

然后我通过这些将 .jars 从其他东西中分离出来:

task deployJars(dependsOn: 'classes') << {
FileUtils.cleanDirectory(new File("web/WEB-INF/lib/"))
project.allclasspathjars.each {File file ->
    if(file.name.endsWith(".jar")) {
        println "Including .jar: " + file.name
        org.apache.commons.io.FileUtils.copyFile(file, new File("web/WEB-INF/lib/" + file.name))
    }
}

在此之后,我可以将所有 类 和资源复制到 .war 结构中:

task createExplodedWar(type: Copy, dependsOn: 'deployJars') {
 from 'build/classes/main'
 from 'build/resources/main'
 into 'web/WEB-INF/classes'
}

最终使用 Gradle SSH 插件将其推送到 tomcat 并重新启动服务器。

一切顺利。