打包 war(for Servlet 容器)
Solon 是一个强调自启动的框架,原则上是不推荐 war 容器运行的。但总会有需要的时候。
1、操作指南:
在普通项目增加几项内容即可打 war 包(仍可打 jar 包):
- 添加
webapp/WEB-INF/web.xml
配置(参考模板里的内容) - 添加
solon-web-servlet
(for javax)或者solon-web-servlet-jakarta
(for jakarta)插件依赖 - 使用
solon-maven-plugin
或者maven-war-plugin
打包
具体模板下载:
- 打包成 war,需要放到 war 容器下运行(比如:Tomcat, WebLogic, TongWeb 等...)
2、具体说明:
a) 添加 webapp/WEB-INF/web.xml 配置,把 solonStartClass 的参数值改成 main 函数类
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>Solon war app</display-name>
<context-param>
<param-name>solonMainClass</param-name>
<param-value>org.example.demo.DemoApp</param-value>
</context-param>
<listener>
<listener-class>org.noear.solon.web.servlet.SolonServletContextListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/</welcome-file>
</welcome-file-list>
</web-app>
b) 添加 solon-web-servlet 插件依赖
提供 servlet 容器对接支持。注意下面的包注释说明:
<!-- javax 的用这个包 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web-servlet</artifactId>
</dependency>
<!-- jakarta 的用这个包(v2.4.1 后支持) -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web-servlet-jakarta</artifactId>
</dependency>
c) 使用 solon-maven-plugin 或者 maven-war-plugin 打包
solon-maven-plugin 同时支持打 jar 和 war(由 packaging 配置指定)
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>${solon.version}</version>
<relativePath />
</parent>
<packaging>war</packaging>
...
<plugin>
<groupId>org.noear</groupId>
<artifactId>solon-maven-plugin</artifactId>
</plugin>
或者 maven-war-plugin,它只支持打 war 包(如果不使用 solon-parent,需要指定插件版本)
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>${solon.version}</version>
<relativePath />
</parent>
<packaging>war</packaging>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
</plugin>