5.3.2. 部署 WAR 至 Jetty
以下是一个部署 WAR 包到 Jetty web 服务器的示例。
我们将使用下面的文件目录结构:
-
C:\work\jetty-home\
- Jetty 安装目录 -
C:\work\jetty-base\
- Jetty 配置目录,用来保存 Jetty 的配置文件,额外的库以及 web 应用程序。 -
C:\work\app_home\
- CUBA 应用程序主目录-
使用 Studio 中的 CUBA project tree > Project > Deployment > WAR Settings 对话框或者手动在build.gradle 末尾添加 buildWar 任务:
task buildWar(type: CubaWarBuilding) { appProperties = ['cuba.automaticDatabaseUpdate': 'true'] singleWar = false }
需要注意的是,这里给 Middleware 和 web 客户端构建了单独的两个 WAR 文件。
-
从命令行启动
buildWar
任务(假设已经预先创建了 Gradle wrapper):gradlew buildWar
如果成功的话,会在项目的
build\distributions\war
目录创建app-core.war
和app.war
。 -
创建一个应用程序主目录目录,比如,
c:\work\app_home
。 -
从开发环境的 Tomcat(
deploy/tomcat/conf
项目子目录)复制logback.xml
到应用程序主目录,并编辑文件中的logDir
属性:<property name="logDir" value="${app.home}/logs"/>
-
下载并安装 Jetty 到本地目录,比如
c:\work\jetty-home
。本示例使用jetty-distribution-9.4.22.v20191022.zip
测试通过。 -
创建
c:\work\jetty-base
目录,并且在这个目录打开命令行窗口执行以下命令:java -jar c:\work\jetty-home\start.jar --add-to-start=http,jndi,deploy,plus,ext,resources
-
创建
c:\work\jetty-base\app-jetty.xml
文件,定义数据库连接池。对于 PostgreSQL 数据库的该文件内容应当基于以下模板:<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd"> <Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext"> <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg/> <Arg>jdbc/CubaDS</Arg> <Arg> <New class="org.apache.commons.dbcp2.BasicDataSource"> <Set name="driverClassName">org.postgresql.Driver</Set> <Set name="url">jdbc:postgresql://localhost/db_name</Set> <Set name="username">username</Set> <Set name="password">password</Set> <Set name="maxIdle">2</Set> <Set name="maxTotal">20</Set> <Set name="maxWaitMillis">5000</Set> </New> </Arg> </New> </Configure>
MS SQL 数据库的
app-jetty.xml
文件需要使用下面这个模板:<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd"> <Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext"> <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg/> <Arg>jdbc/CubaDS</Arg> <Arg> <New class="org.apache.commons.dbcp2.BasicDataSource"> <Set name="driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set> <Set name="url">jdbc:sqlserver://server_name;databaseName=db_name</Set> <Set name="username">username</Set> <Set name="password">password</Set> <Set name="maxIdle">2</Set> <Set name="maxTotal">20</Set> <Set name="maxWaitMillis">5000</Set> </New> </Arg> </New> </Configure>
-
数据库连接池需要下载以下这些 JAR 并且添加到
c:\work\jetty-base\lib\ext
目录。其中有两个文件可以在deploy\tomcat\shared\lib
项目子目录中找到:commons-pool2-2.6.2.jar commons-dbcp2-2.7.0.jar commons-logging-1.2.jar
-
从 Jetty 安装目录复制
start.ini
文件至c:\work\jetty-base
目录。在c:\work\jetty-base\start.ini
文件开始处添加下列内容:--exec -Xdebug -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n -Dapp.home=c:\work\app_home -Dlogback.configurationFile=c:\work\app_home\logback.xml app-jetty.xml
-
复制数据库的 JDBC 驱动到
c:\work\jetty-base\lib\ext
目录。可以从项目的deploy\tomcat\lib
目录复制驱动。比如对于 PostgreSQL,驱动文件是postgresql-42.2.5.jar
。 -
复制 WAR 文件到
c:\work\jetty-base\webapps
目录。 -
在
c:\work\jetty-base
目录打开命令行窗口并且执行:java -jar c:\work\jetty-home\start.jar
-
在浏览器打开
http://localhost:8080/app
。
-