解决JFinal不支持jakarta无法在较新版本的Servlet容器部署的问题

距离 2019 年 JavaEE 标准规范改名为 JakartaEE 已经4、5年了,但国内基于 JavaEE 标准开发的应用仍处于主导地位。但是随着时间的推移以及软件生态的不断更新换代,许多企业也在尝试基于 JakartaEE 标准开发应用。但是目前 JFinal 尚不支持 JakartaEE 命名空间。为推动更多的企业由 JavaEE 向 JakartaEE 的转变,Apache Tomcat 推出了一个开源的 JavaEE 迁移 JakartaEE 的工具。这里以 JFinal_demo 为例介绍如何实现基于 JFinal 开发的应用支持 JakartaEE 标准。

1. clone migration:git clone https://github.com/apache/tomcat-jakartaee-migration.git

2. 修改 pom.xml :删除 maven 插件 maven-antrun-plugin 的依赖,否则打包会失败。

3. 打包 migration:mvn package -Dmaven.test.skip=true

4. 将 target/jakartaee-migration-1.0.8-shaded.jar 拷贝到项目根目录下。

5. 修改项目配置 pom.xml 文件:

<properties>
    <maven.assembly.finalname>${project.artifactId}-release</maven.assembly.finalname>
    <migration.jar.name>jakartaee-migration-1.0.8-shaded.jar</migration.jar.name>
</properties>

<!-- maven-antrun-plugin 需要位于 maven-assembly-plugin 之后 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <echo> javax.xxx 包转为 jakarta.xxx </echo>
                    <exec executable="java" failonerror="true">
                        <arg line="-jar ${basedir}/${migration.jar.name} -profile=EE ${project.build.directory}/${maven.assembly.finalname} ${project.build.directory}/${maven.assembly.finalname}-jakarta"/>
                    </exec>
                    <exec executable="java" failonerror="true">
                        <arg line="-jar ${basedir}/${migration.jar.name} -profile=EE ${project.build.directory}/${maven.assembly.finalname}.zip ${project.build.directory}/${maven.assembly.finalname}-jakarta.zip"/>
                    </exec>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

6. 项目执行打包 mvn clean package,包含 -jakarta 命名的文件夹和 zip 包即为可运行于支持 JakartaEE 标准规范的 Servlet 容器的包。注意:所有的 jar 包都已转换,如果仅转换部分 jar, 请逐个指定即可。

评论区

zzutligang

2024-03-05 09:52

不错,不错,赞一个。不过似乎用jfinal的都在使用undertow了

热门分享

扫码入社