我想将同一个Gradle项目创建的两个webapp运行到Jetty服务器中。让我们称这两个网络用户为#n; ninja"和"战士"。
两个webapp都非常相似,它们仅在应用程序上下文文件(在web.xml文件中引用)和资源上有所不同。
为了部署它们,接受这两个选项:
http://www.example.com:8080/app (ninja webapp) http://www.example.com:8081/app (warrior webapp)
http://www.example.com:8080/ninja_app http://www.example.com:8080/warrior_app
有一个或两个Jetty实例应该可以用于这个项目。
这是我的项目布局:
/src/main/java /src/main/resources /src/main/webapp (ninja webapp) /src/main/webapp-warrior
第一个问题:如何使用Gradle创建两个war文件?
第二个问题:如何使用Gradle在Jetty服务器中部署两个war文件?
答案 0 :(得分:7)
请查看 Gretty gradle插件:https://github.com/akhikhl/gretty
它支持多个开箱即用的网络应用程序。它可以帮助您:
此外,你可以:
有很多文档可以帮助解决所有问题:http://akhikhl.github.io/gretty-doc/
披露:我是Gretty插件的作者。
快乐编码:)
答案 1 :(得分:3)
如果您不想创建两个不同的项目,可能需要使用Gradle中的apply from:功能创建两个不同的gradle配置文件。
对于每个webapp实例,ninja和warrior,您必须创建一个脚本文件,其中包含特定于该配置文件的所有信息。
在这些新的gradle构建文件ninja-profile.gradle和warrior-profile.gradle中,您可以设置不同于ninja和warrior的特定配置,在这种情况下可以是:
在你的" main"构建文件,您可以定义所有配置文件和构建需求的常用内容,另外还要添加以下行:
apply from: "${profile}-profile.gradle"
运行Gradle时,您可以使用-P选项传递配置文件的名称:
$ gradle -Pprofile=ninja tasks
或
$ gradle -Pprofile=warrior tasks
答案 2 :(得分:1)
我们最终实现了一个解决方案,其中为两个项目创建了sourceSets,因此目录布局为:
/src/main/java
:包含两个项目的公共类/src/main/webapp
:包含两个项目的常见Web应用程序。/src/ninjaMain/resources
:包含忍者项目的特定资源/src/warriorMain/resources
:包含战士项目的特定资源然后,build.gradle文件被配置为创建两个war文件。之后,两个war文件都使用货物和码头部署在同一个webapp容器中:
apply 'java'
apply 'war'
apply 'cargo'
task createNinjaWar(type: War, dependsOn: classes) {
baseName = 'ninja'
from file('src/main/webapp')
destinationDir = file("$buildDir/dist")
webInf {
from ('src/ninjaMain/resources') { into 'classes' }
}
}
task createWarriorWar(type: War, dependsOn: classes) {
baseName = 'warrior'
from file('src/main/webapp')
destinationDir = file("$buildDir/dist")
webInf {
from ('src/warriorMain/resources') { into 'classes' }
}
}
// Deploy
cargo {
containerId = 'jetty9x'
port = 8080
deployable {
context = 'ninja'
file = createNinjaWar.archivePath
}
deployable {
context = 'warrior'
file = createWarriorWar.archivePath
}
}
现在是两个Web应用程序的访问URL:
http://www.example.com:8080/ninja
http://www.example.com:8080/warrior
答案 3 :(得分:0)
为了更好的可读性,代码组织和更简单的维护,这两个项目应该分开。然后可以为每个项目单独应用和配置jetty
插件,并且所有env都可以在父build.gradle
文件中启动。