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

weblogic-maven-plugin:list-apps通过管理端口调用时抛空指针异常

解决WebLogic Maven插件list-apps在T3s协议下的NPE问题&自动化部署全流程实现

我之前也碰到过WebLogic 12.1.3 Maven插件在T3s连接下的类似NPE问题,结合官方文档和实际调试,给你整理了针对性的解决方案,同时帮你实现包含旧版本清理的自动化部署流程:

一、修复list-apps的NullPointerException

这个NPE大概率是SSL连接后插件获取应用状态时的对象初始化失败导致的,你可以按以下步骤排查修复:

  1. 验证SSL配置的完整性
    首先确认JVM参数里的信任库配置完全正确:

    -Djavax.net.ssl.trustStore=/path/to/your/truststore.jks
    -Djavax.net.ssl.trustStorePassword=your-truststore-password
    

    确保信任库中确实导入了WebLogic管理服务器的SSL证书。如果暂时不想处理证书主机名匹配问题,可以临时添加-Dweblogic.security.SSL.ignoreHostnameVerification=true跳过验证,要是这样NPE消失了,就说明是证书的主机名和实际服务器不匹配,需要重新生成对应域名的证书。

  2. 补全WebLogic客户端依赖
    12.1.3的weblogic-maven-plugin本身依赖的客户端jar可能不全,导致SSL连接后无法正确解析应用状态。你可以在pom.xml中添加完整的wlfullclient依赖:

    <dependency>
        <groupId>com.oracle.weblogic</groupId>
        <artifactId>wlfullclient</artifactId>
        <version>12.1.3-0-0</version>
        <scope>provided</scope>
    </dependency>
    

    添加后重新执行weblogic:list-apps,很多时候这个依赖补全就能解决NPE问题。

  3. 调整插件配置参数
    在插件的configuration里明确指定secure=true和对应的SSL协议,避免插件使用默认的旧协议导致异常:

    <plugin>
        <groupId>com.oracle.weblogic</groupId>
        <artifactId>weblogic-maven-plugin</artifactId>
        <version>12.1.3-0-0</version>
        <configuration>
            <adminurl>t3s://your-host:your-admin-port</adminurl>
            <user>your-admin-user</user>
            <password>your-admin-pass</password>
            <secure>true</secure>
            <sslProtocol>TLSv1.2</sslProtocol> <!-- 12.1.3推荐使用TLSv1.2 -->
        </configuration>
    </plugin>
    

二、实现包含旧版本清理的自动化部署流程

既然Purge任务无法处理退役状态的旧应用,我们可以结合Maven插件和WLST脚本实现完整流程:

1. 分发应用并以管理员模式启动

用weblogic:deploy目标指定adminMode=true,确保只有管理员能访问:

mvn weblogic:deploy -Dadminurl=t3s://host:adminport -Duser=admin -Dpassword=your-pass -Dsource=target/your-app.war -Dname=your-app -DadminMode=true

2. 执行应用测试

可以用Maven Surefire插件跑集成测试,或者用curl调用应用的健康检查接口,确保应用功能正常。

3. 正式启动应用或卸载回滚

  • 测试通过后,退出管理员模式启动应用:
    mvn weblogic:start-app -Dadminurl=t3s://host:adminport -Duser=admin -Dpassword=your-pass -Dname=your-app
    
  • 测试失败则直接卸载:
    mvn weblogic:undeploy -Dadminurl=t3s://host:adminport -Duser=admin -Dpassword=your-pass -Dname=your-app
    

4. 自动清理退役状态的旧版本

编写WLST脚本purge-retired-apps.py来查询并删除退役应用:

connect('admin-user', 'admin-pass', 't3s://host:adminport')
domainRuntime()
appRuntimes = cmo.getAppRuntimeMBeans()
for app in appRuntimes:
    appId = app.getApplicationIdentifier()
    appState = app.getState()
    # WebLogic中退役状态对应的字符串是'RETIRED',常量值为3
    if appState == 'RETIRED' or appState == 3:
        print(f"清理退役应用: {appId}")
        undeploy(appId, retireTimeout=0)
disconnect()
exit()

然后在pom.xml中配置exec-maven-plugin,在部署流程的最后执行这个脚本:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>purge-retired-apps</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>${java.home}/bin/java</executable>
                <arguments>
                    <argument>-Djavax.net.ssl.trustStore=/path/to/truststore.jks</argument>
                    <argument>-Djavax.net.ssl.trustStorePassword=truststore-pass</argument>
                    <argument>-cp</argument>
                    <argument>${wl.home}/server/lib/wlfullclient.jar:${wl.home}/server/lib/wlst.jar</argument>
                    <argument>weblogic.WLST</argument>
                    <argument>purge-retired-apps.py</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

记得在pom.xml中定义${wl.home}为你的WebLogic安装路径,比如:

<properties>
    <wl.home>/opt/oracle/wls1213</wl.home>
</properties>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:17:36