WebSphere 9.x无法通过Jython脚本部署EAR文件求助
嘿,这个错误我太熟了——问题出在你的Jython脚本里,部署命令的参数格式完全错了,WebSphere把EAR文件路径和一堆部署参数当成了一个完整的文件名,自然找不到这个不存在的“文件”。
问题根源
你看错误信息里的“文件路径”:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installableApps/my_ear_file.ear,'[-node DefaultNode01 -cell DefaultCell01 -server server1 -MapWebModToVH [[ "Our War One" first_war.war,WEB-INF/web.xml default_host ]["Our War Two" second_war.war,WEB-INF/web.xml default_h...
这明显是把EAR路径和部署参数混在一个字符串里了,AdminApp.install()方法需要两个独立的参数:第一个是EAR文件的路径,第二个是部署选项的字符串。
修复步骤
修正脚本里的部署命令
找到脚本中调用AdminApp.install()的行,把参数拆分成两个独立的字符串:
错误写法(混在一起):AdminApp.install('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installableApps/my_ear_file.ear,[-node DefaultNode01 -cell DefaultCell01 -server server1 -MapWebModToVH [[ "Our War One" first_war.war,WEB-INF/web.xml default_host ]["Our War Two" second_war.war,WEB-INF/web.xml default_host]]]')正确写法(拆分参数):
ear_path = '/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installableApps/my_ear_file.ear' deploy_options = '[-node DefaultNode01 -cell DefaultCell01 -server server1 -MapWebModToVH [[ "Our War One" first_war.war,WEB-INF/web.xml default_host ]["Our War Two" second_war.war,WEB-INF/web.xml default_host]]]' AdminApp.install(ear_path, deploy_options)重点是用逗号把两个参数分开,各自用引号包裹。
验证EAR文件的存在和权限
先确认文件真的在指定路径:ls -l /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installableApps/my_ear_file.ear同时确保运行脚本的用户(比如
root)有读取这个文件的权限,如果权限不够,用chmod调整:chmod +r /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installableApps/my_ear_file.ear先在wsadmin命令行测试
为了避免脚本其他问题,可以先直接用wsadmin命令行测试部署命令,确认参数有效:/opt/IBM/WebSphere/AppServer/bin/wsadmin.sh -lang jython -c "AdminApp.install('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installableApps/my_ear_file.ear', '[-node DefaultNode01 -cell DefaultCell01 -server server1 -MapWebModToVH [[ \"Our War One\" first_war.war,WEB-INF/web.xml default_host ][\"Our War Two\" second_war.war,WEB-INF/web.xml default_host]]]')"注意这里的双引号要转义(
\"),避免被shell解析。
额外提示
如果部署选项里的空格或引号容易搞混,也可以用列表格式传递部署选项,可读性更强:
deploy_options = ['-node', 'DefaultNode01', '-cell', 'DefaultCell01', '-server', 'server1', '-MapWebModToVH', [["Our War One", "first_war.war,WEB-INF/web.xml", "default_host"], ["Our War Two", "second_war.war,WEB-INF/web.xml", "default_host"]]] AdminApp.install(ear_path, deploy_options)
内容的提问来源于stack exchange,提问作者daclac

