我试图让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'
}
答案 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并重启服务器。
一切都很好。