使用 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 并重新启动服务器。
一切顺利。
我正试图让 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 并重新启动服务器。
一切顺利。