我想将同一个Gradle项目创建的两个webapp运行到Jetty服务器中 . 让我们称这两个webapps为“ninja”和“warrior” .
两个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文件?
4 回答
如果您不想创建两个不同的项目,则可能需要使用Gradle中的apply from:功能创建两个不同的gradle配置文件 .
对于每个webapp实例,ninja和warrior,您必须创建一个脚本文件,其中包含特定于该配置文件的所有信息 .
在这些新的gradle构建文件ninja-profile.gradle和warrior-profile.gradle中,您可以设置不同于ninja和warrior的特定配置,在这种情况下可以是:
Resources文件夹:您可以为每个实例创建一个单独的资源文件夹
Jetty配置:如果要运行两个不同的2个webapp实例,每个实例都在一个独立的jetty实例中 .
在“main”构建文件中,您可以定义所有配置文件和构建需求的常用内容,并添加以下行:
运行Gradle时,可以使用-P选项传递配置文件的名称:
要么
请看一下 Gretty gradle插件:https://github.com/akhikhl/gretty
它支持多个开箱即用的Web应用程序 . 它可以帮助您:
运行web-app项目"inplace",即来自已编译的类
将web-app项目作为WAR文件运行
从文件系统运行非项目WAR文件
从maven存储库运行非项目WAR文件(当然,首先下载WAR)
此外,您可以:
在任何Java IDE调试器下的同一Jetty服务器上调试多个web-apps .
在同一Jetty服务器上对多个Web应用程序执行集成测试 .
使用Jacoco执行代码覆盖 - 包括客户端和服务器端 .
有很多文档可以帮助解决所有问题:http://akhikhl.github.io/gretty-doc/
披露:我是Gretty插件的作者 .
快乐编码:)
我们最终实现了一个解决方案,其中为两个项目创建了sourceSets,因此目录布局是:
/src/main/java
:包含两个项目的公共类/src/main/webapp
:包含两个项目的常用webapp ./src/ninjaMain/resources
:包含忍者项目的特定资源/src/warriorMain/resources
:包含warrior项目的特定资源然后,build.gradle文件配置为创建两个war文件 . 之后,两个war文件都使用货物和码头部署在同一个webapp容器中:
现在,这两个Web应用程序的访问URL是:
http://www.example.com:8080/ninja
http://www.example.com:8080/warrior
为了更好的可读性,代码组织和更简单的维护,这两个项目应该分开 . 然后可以为每个项目单独应用和配置
jetty
插件,并且所有env都可以在父build.gradle
文件中启动 .