先安装Jboss eap 7 + JDK8,进行项目测试,兼容完在做升级 Jboss eap 8 + JDK17
下载JBoss及JDK包
Jboss EAP:JBoss Enterprise Application Platform Download | Red Hat Developer
Jboss 开源:JBoss Application Server Downloads - JBoss Community
参考官方文档:docs.redhat.com/en/document…
将包导入到linux服务器
cd 想要上传的路径
windows导入到linux
rz
linux导出到windows
sz 文件名
也可以通过你自己的工具直接拖拉拽进去
解压下载好的包
tar -zxvf a.tar //解包至当前目录
tar -zxvf a.tar -C /usr------ //指定解压的位置
unzip test.zip //解压*.zip文件
unzip -l test.zip //查看*.zip文件的内容
tar xvf jdkxxx.tar.gz
配置JDK(修改全局变量方式--不建议此方式)
如果你这台服务器就是供给你自己使用你可以更改全局的环境变量,如果是有别的同事使用这个全局变量,建议让你的jboss直接指定对应的JDK,而不是去更改全局的
vim /etc/profile --修改文件
:wq --保存
也可以通过工具,右键直接编辑
注意:这里JBOSS_HOME无需配置,如果想在linux中部署多个版本的jboss,他的思想跟tomcat一样,可以启动多个服务,会自动找对应的版本
JAVA_HOME=/home/xxx/jdk1.8.0_202
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
# export JBOSS_HOME=/home/tangweilong/jboss-eap-7.3
# export CLASSPATH=.:$CLASSPATH:$JBOSS_HOME/lib
# export PATH=$PATH:$JBOSS_HOME/bin
让配置文件生效
source /etc/profile
测试如图
java -version
找到bin目录下的standlone.conf,进行编辑,将指定的jdk路径放进去,就可以跳过环境变量读指定的jdk版本
部署Jboss
部署的话jboss7跟jboss8基本一样,唯一很大的区别在于打包的方式以及项目的兼容
解压缩完直接修改配置文件就好
- 修改外网访问,默认只允许本机访问
- 修改端口,避免端口占用
启动jboss,会出现以下关键信息代表启动成功
./standalone.sh
监测端口命令,找到自己的端口是否在Jboss在跑
netstat -tulnp | frep 8033
监测进程命令,查看这个进程是否是Jboss在运行
ps -ef | grep 260247
访问示例:服务器地址:加你自己配置的端口
发布项目(Jboss7)
注意:保证maven版本3.6.2 以上
打包命令--如果在idea的Terminal中打包需要安装东西,可以在项目文件中(带pom文件的路径下-如图),cmd进行打包
mvn clean install -Dmaven.test.skip=true
打完包后,war包的路径在项目的release目录下
将打包好的war直接放置在jboss的\standalone\deployments文件中
重新进入jboss的bin路径下,重启jboss,加载项目
./standalone.sh
启动成功,可以访问检测,也可以看一下deployments是否生成了deployed文件,如果失败会生成一个failed文件
剩余问题就是特殊项目特殊解决了
发布项目(Jboss8)
注意:linux中的jdk如果是11 项目必须是jdk11 如果linux中的jdk是17 项目可以是 jdk11 jdk17,选择对应的版本去打包
注意:保证maven版本3.6.2 以上
注意:保证springboot版本在3以上
将下面的pom文件的内容兼容到自己项目的主pom文件中,然后更新maven,直到能找到全部依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.as.quickstarts</groupId>
<artifactId>jboss8</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.server>8.0.0.GA-redhat-00009</version.server>
<version.bom.ee>${version.server}</version.bom.ee>
<version.plugin.wildfly>4.1.1.Final</version.plugin.wildfly>
<version.plugin.war>3.3.2</version.plugin.war>
<finalName>${project.artifactId}</finalName>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${version.plugin.wildfly}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${version.plugin.war}</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<!-- 如果你有一个已有的 web.xml 文件,可以使用以下配置 -->
<!-- <webxml>src/main/webapp/WEB-INF/web.xml</webxml> -->
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<repositories>
<repository>
<id>jboss-public-maven-repository</id>
<name>JBoss Public Maven Repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
<layout>default</layout>
</repository>
<repository>
<id>redhat-ga-maven-repository</id>
<name>Red Hat GA Maven Repository</name>
<url>https://maven.repository.redhat.com/ga/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>jboss-public-maven-repository</id>
<name>JBoss Public Maven Repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>redhat-ga-maven-repository</id>
<name>Red Hat GA Maven Repository</name>
<url>https://maven.repository.redhat.com/ga/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.bom</groupId>
<artifactId>jboss-eap-ee-with-tools</artifactId>
<version>${version.bom.ee}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>javax.servlet</groupId>-->
<!-- <artifactId>javax.servlet-api</artifactId>-->
<!-- <version>4.0.1</version>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
</dependencies>
</project>
找到pom文件的路径下,cmd打包
注意:jboss8的打包命令跟jboss7不一样
mvn package wildfly:deploy
打完包后,war包的路径在项目的release目录下
将打包好的war直接放置在jboss的\standalone\deployments文件中
重新进入jboss的bin路径下,重启jboss,加载项目
./standalone.sh
启动成功,可以访问检测,也可以看一下deployments是否生成了deployed文件,如果失败会生成一个failed文件
项目兼容(在已有的项目上做升级)
- sdk升级
<cfca.private.SADK.version>3.7.1.0</cfca.private.SADK.version>
替换为
<cfca.private.SADK.version>3.7.1.0patch7</cfca.private.SADK.version>
2 maven-compiler-plugin升级
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
替换为
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${maven-compiler-plugin-configuration.version}</source>
<target>${maven-compiler-plugin-configuration.version}</target>
</configuration>
</plugin>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<maven-compiler-plugin-configuration.version>17</maven-compiler-plugin-configuration.version>
3 升级springboot版本为 3 以上
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.12</version>
<relativePath/>
</parent>
4 修改全局的Resource修改为Autowired
例如:
@Resource("bankcommConfigImpl")
替换为:
@Autowired
@Qualifier("bankcommConfigImpl")
5 在bean的pom中引入jakarta依赖
除了jakarta.jws-api其他springboot3都会自带版本
<dependency>
<groupId>jakarta.jws</groupId>
<artifactId>jakarta.jws-api</artifactId>
<version>${jakarta.jws-api}</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.xml.soap</groupId>
<artifactId>jakarta.xml.soap-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
</dependency>
6 修改包中引入的javax的包为jakarta包
可以利用idea的自动扫描工具进行扫描是否有遗漏项的替换
例如:
import javax.annotation.xxx;
替换为:
import jakarta.annotation.xxx;
7 hibernate依赖升级
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator-jdk7.version}</version>
<scope>provided</scope>
</dependency>
<hibernate-validator-jdk7.version>6.0.18.Final</hibernate-validator-jdk7.version>
替换为
<hibernate-validator-jdk7.version>8.0.2.Final</hibernate-validator-jdk7.version>
8 spring-data-redis依赖升级
建议引用springboot3版本自带的版本号
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
9 jedis依赖升级
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<scope>compile</scope>
</dependency>
10 ErrorAttributeOptions 异常处理
Map<String, Object> attr = this.errorAttributes.getErrorAttributes(requestAttributes, false);
替换为
ErrorAttributeOptions errorAttributeOptions = ErrorAttributeOptions.of(ErrorAttributeOptions.Include.EXCEPTION);
Map<String, Object> attr = this.errorAttributes.getErrorAttributes(requestAttributes, errorAttributeOptions);
11 maven-antrun-plugin依赖升级
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
</plugin>
12 将项目pom中的tasks替换为target
<tasks>
xxxxxx
</tasks>
替换为
<target>
xxxxxx
</target>
13 tools依赖清除
Tools相关依赖进行注释掉,例如:
<!-- <dependencies>-->
<!-- <dependency>-->
<!-- <groupId>com.sun</groupId>-->
<!-- <artifactId>tools</artifactId>-->
<!-- <version>1.5.0</version>-->
<!-- <scope>system</scope>-->
<!-- <systemPath>${java.home}/../lib/tools.jar</systemPath>-->
<!-- </dependency>-->
<!-- </dependencies>-->
14 lombok 的依赖 1.18.20 版本或以上
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<lombok.version>1.18.20</lombok.version>
15 groovy 依赖版本兼容
注意codehaus跟apache不同包下的groovy版本是不一样的
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<classifier>indy</classifier>
<version>2.4.21</version>
</dependency>
16 ehcache依赖版本升级,解决xml文件解析错误问题
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</version>
</dependency>
<ehcache.version>3.6.1</ehcache.version>
升级为
<ehcache.version>3.10.8</ehcache.version>
17 ehcache要指定jakarta
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</version>
<classifier>jakarta</classifier>
</dependency>
替换为
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</version>
<classifier>jakarta</classifier>
</dependency>
18 spring版本升级为 6以上
建议直接使用springboot3自带的,如果项目中有自己指定的版本要进行修改
<springframework.version>6.0.21</springframework.version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>??</artifactId>
<version>${springframework.version}</version>
</dependency>
Springframework的依赖有很多,建议保持版本一致以避免不必要的麻烦
19 JwtInterceptor改造
public class JwtInterceptor extends HandlerInterceptorAdapter
替换为
public class JwtInterceptor implements AsyncHandlerInterceptor
20 Myabits依赖升级
<mybatis.version>3.5.6</mybatis.version>
替换为
<mybatis.version>3.5.17</mybatis.version>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
21 commons-pool2依赖升级
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${commons-pool2.version}</version>
</dependency>
22 全局指定mybatis版本
可能会出现,打完包的mybatis版本跟项目中的不一致
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.17</version>
</dependency>
</dependencies>
</dependencyManagement>
23 解決LogFilter重复注册问题
如下两个注解会进行注册两遍,如果重复使用,会报这个拦截器已经注册过
@Configuration
@WebFilter(filterName = "LogFilter", urlPatterns = "/*")
替换为
@Configuration
//@WebFilter(filterName = "LogFilter", urlPatterns = "/*")
24 解決log4j启动失败问题
在war包的META-INF路径下,增加配置文件jboss-deployment-structure.xml,排除jboss自带的一些依赖避免冲突,例如org.jboss.logmanager.log4j2
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.jboss.logmanager.log4j2" />
<module name="org.jboss.logmanager"/>
<module name="org.apache.logging.log4j.api"/>
<module name="java.logging"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
并且需要排除相关依赖,找到jboss中该以来的路径,打开对应的module.xml
将如下的modules加入到jboss-deployment-structure.xml中即可
具体可看官方文档如何使用jboss-deployment-structure.xml
25 Slf4jLoggerFactory无法转换为LoggerContext
slf4j的jar与Jboss自带的jar产生了冲突、使用 jboss-deployment-structure.xml 文件进行对冲突依赖排除
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
<!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
<!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
<exclusions>
<module name="org.slf4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
26 wildfly服务,调用接口返回时报jackson相关错误
由于jboss的module中自带Jackson而且版本较低,无法和Springboot2.x之后的兼容,Jackson相关jar包与wildfly自带的jar产生了冲突
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
<exclusions>
<!-- 所有相关Jackson的包都要去除,不然可能会有其他错误 -->
<module name="com.fasterxml.jackson.core.jackson-core" />
<module name="com.fasterxml.jackson.core.jackson-annotations" />
<module name="com.fasterxml.jackson.core.jackson-databind" />
<module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8" />
<module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
<module name="org.jboss.resteasy.resteasy-jackson2-provider" />
<module name="org.jboss.resteasy.resteasy-jackson-provider" />
</exclusions>
</deployment>
</jboss-deployment-structure>
新建项目(如果只是为了测试锻炼的话--Jboss8)
可参考官网:为 JBoss EAP 部署开发应用程序入门
懒得看官网的:新建一个maven项目或者springboot项目,导入下面的pom文件,以及java文件然后打包测试就好了
或者gitee拉取我搭的 maven版本:gitee.com/its-a-littl… springboot3 + jdk17版本:gitee.com/its-a-littl…
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.as.quickstarts</groupId>
<artifactId>jboss8</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.server>8.0.0.GA-redhat-00009</version.server>
<version.bom.ee>${version.server}</version.bom.ee>
<version.plugin.wildfly>4.1.1.Final</version.plugin.wildfly>
<version.plugin.war>3.3.2</version.plugin.war>
<finalName>${project.artifactId}</finalName>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${version.plugin.wildfly}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${version.plugin.war}</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<!-- 如果你有一个已有的 web.xml 文件,可以使用以下配置 -->
<!-- <webxml>src/main/webapp/WEB-INF/web.xml</webxml> -->
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<repositories>
<repository>
<id>jboss-public-maven-repository</id>
<name>JBoss Public Maven Repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
<layout>default</layout>
</repository>
<repository>
<id>redhat-ga-maven-repository</id>
<name>Red Hat GA Maven Repository</name>
<url>https://maven.repository.redhat.com/ga/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>jboss-public-maven-repository</id>
<name>JBoss Public Maven Repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>redhat-ga-maven-repository</id>
<name>Red Hat GA Maven Repository</name>
<url>https://maven.repository.redhat.com/ga/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.bom</groupId>
<artifactId>jboss-eap-ee-with-tools</artifactId>
<version>${version.bom.ee}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>javax.servlet</groupId>-->
<!-- <artifactId>javax.servlet-api</artifactId>-->
<!-- <version>4.0.1</version>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
</dependencies>
</project>
新建一个HelloWorldServlet去进行测试
package org.jboss.as.quickstarts.helloworld;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/HelloWorld")
public class HelloWorldServlet extends HttpServlet {
static String PAGE_HEADER = "<html><head><title>helloworld</title></head><body>";
static String PAGE_FOOTER = "</body></html>";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.println(PAGE_HEADER);
writer.println("<h1> Hello World! </h1>");
writer.println(PAGE_FOOTER);
writer.close();
}
}
改一下jsp快速测试
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=HelloWorld">
</head>
</html>