You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过OpenLiberty将Jar转为War并开展集成测试?

解决方案:基于OpenLiberty实现Jar转War并完成集成测试

一、无需手动转War,直接用OpenLiberty部署Jar并测试

OpenLiberty本身支持直接部署可执行Jar或普通Jar(只要包含必要的Jakarta EE/Java EE组件),不需要提前转成War文件,这是最简便的测试方式,推荐优先采用:

1. 通过Maven Liberty插件配置自动化测试流程

修改项目的pom.xml,添加Liberty插件和集成测试插件的配置,让测试阶段自动启动服务器、部署Jar、执行测试:

<build>
    <plugins>
        <!-- OpenLiberty Maven插件 -->
        <plugin>
            <groupId>io.openliberty.tools</groupId>
            <artifactId>liberty-maven-plugin</artifactId>
            <version>3.10.1</version>
            <executions>
                <execution>
                    <id>start-server</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>start</goal>
                    </goals>
                </execution>
                <execution>
                    <id>deploy-jar</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>deploy</goal>
                    </goals>
                    <configuration>
                        <appArtifact>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>${project.artifactId}</artifactId>
                            <version>${project.version}</version>
                            <type>jar</type>
                        </appArtifact>
                    </configuration>
                </execution>
                <execution>
                    <id>run-integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
                <execution>
                    <id>stop-server</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <serverName>test-instance</serverName>
                <!-- 指定测试用的服务器配置目录,需包含数据源、JPA特性等配置 -->
                <serverDirectory>src/test/liberty/config</serverDirectory>
            </configuration>
        </plugin>
        <!-- Maven集成测试插件,用于执行IT测试类 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>3.2.5</version>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2. 编程式控制服务器部署与测试

如果需要完全自定义部署逻辑,可使用OpenLiberty的Server API直接在代码中启动服务器、部署Jar并执行测试:

import io.openliberty.api.server.LibertyServer;
import io.openliberty.api.server.ServerFactory;
import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.websphere.application.ApplicationManager;

import java.util.Properties;

public class JarDeploymentTest {
    public static void main(String[] args) throws Exception {
        // 初始化并启动Liberty测试服务器
        LibertyServer server = ServerFactory.getLibertyServer();
        server.startServer();

        // 创建AdminClient用于部署操作
        Properties adminProps = new Properties();
        adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
        adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
        adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880"); // 对应你的服务器SOAP端口

        AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);
        ApplicationManager appManager = ApplicationManager.getApplicationManager(adminClient);

        // 部署项目生成的Jar包
        String jarPath = "target/backendServices-1.0-SNAPSHOT.jar";
        appManager.installApplication("backendServices", new java.io.File(jarPath).toURI().toString(), null);
        appManager.startApplication("backendServices");

        // 执行集成测试(调用你的测试类逻辑)
        EventEntityIT.executeTests();

        // 清理部署并停止服务器
        appManager.stopApplication("backendServices");
        appManager.uninstallApplication("backendServices");
        server.stopServer();
    }
}

二、若需临时生成War包用于测试(可选)

如果必须模拟DevOps的War打包流程,可通过maven-war-plugin在测试阶段临时将Jar包打包为War:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.2</version>
    <executions>
        <execution>
            <id>package-war-for-test</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>war</goal>
            </goals>
            <configuration>
                <!-- 将Jar包放入War的WEB-INF/lib目录 -->
                <webResources>
                    <resource>
                        <directory>target</directory>
                        <includes>
                            <include>${project.artifactId}-${project.version}.jar</include>
                        </includes>
                        <targetPath>WEB-INF/lib</targetPath>
                    </resource>
                </webResources>
                <!-- 可选:添加测试用的web.xml或web-fragment.xml -->
                <webXml>src/test/resources/web.xml</webXml>
            </configuration>
        </execution>
    </executions>
</plugin>

之后在Liberty插件配置中指定部署生成的War包即可,配置方式与部署Jar类似,仅需将<type>改为war。

三、关键注意事项

  • 确保你的Jar包包含必要的Jakarta EE/Java EE注解(如@Stateless、@Entity、@ApplicationPath等),Liberty会自动识别并将其作为Web组件部署。
  • 测试类需放置在src/test/java目录下,遵循集成测试命名规范(以IT结尾),配合maven-failsafe-plugin执行。
  • 测试用的server.xml需启用对应特性,例如jpa-3.1、cdi-4.0、jaxrs-3.1等,根据你的项目依赖调整。

内容的提问来源于stack exchange,提问作者Javadee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:15:11