使用War插件但不创建存档

时间:2015-03-11 14:03:57

标签: gradle war build.gradle

我试图让Gradle处理一个非常大的Web应用程序的部署。过去当我们使用Ant而不是创建一个非常大的.war文件时,我们只需将所有代码组装在一个文件夹中 - libraries,.jsp'等等 - 然后将它们scp到部署目标。这将加速部署,因为我们只会移动更改的文件。

但是,我在使用Gradle尝试这样做时遇到了麻烦。使用War插件会创建一个我们不想要的实际.war文件。我尝试过创建一个依赖于'类的任务。并生成必要的类和资源文件夹。但是,库依赖项在哪里?我怎么能在一个地方得到这个所以我可以做一个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'

}

1 个答案:

答案 0 :(得分:0)

你正确的蛋白石......没有简单的方法可以使用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))
    }
}

在此之后,我可以复制所有课程&amp;资源进入.war结构:

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

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

一切都很好。