WebLogic 12.2.1.3复制域后部署WAR包报错问题咨询
我来帮你搞定这个WebLogic的棘手问题!你遇到的这个错误,核心原因是直接复制域之后,WebLogic生成的临时资源路径里出现了违规的相对路径../,导致Java解析zip格式的资源URL时触发了非法字符的报错,而.appmergegen是WebLogic用来临时合并应用资源的目录,路径配置乱了自然就出问题了。下面给你几个靠谱的解决方案:
1. 先清理临时目录,让WebLogic重新生成干净的资源
先把出问题的服务器停掉,然后手动删除新域下的临时和缓存目录:
# Linux/Unix系统 rm -rf <你的新域路径>/servers/AdminServer/tmp rm -rf <你的新域路径>/servers/AdminServer/cache # Windows系统 rd /s /q <你的新域路径>\servers\AdminServer\tmp rd /s /q <你的新域路径>\servers\AdminServer\cache
删除完之后重新启动服务器,再尝试部署WAR包,很多时候临时文件的残留是罪魁祸首。
2. 检查域配置里的硬编码路径
直接复制域很容易导致配置文件里残留原域的路径,打开新域下的config/config.xml,搜索tmp-dir、cache-dir这类配置项,确保它们的路径是基于当前新域的绝对路径,或者是正确的相对路径(不要出现指向原域的../)。
另外还要检查启动脚本startWebLogic.sh(或.cmd)里的环境变量,比如DOMAIN_HOME有没有被正确设置成新域的路径,避免脚本里硬编码了原域的地址。
3. 用WebLogic官方工具复制域(最稳妥的方法)
别直接拷贝文件!WebLogic提供了pack和unpack工具来安全地复制域,步骤如下:
- 在原域所在机器上,使用
pack工具生成域模板:
<WebLogic安装目录>/common/bin/pack.sh -domain=<原域完整路径> -template=<要生成的模板jar路径> -template_name="My Domain Template"
- 把生成的模板jar文件拷贝到目标机器的任意位置,然后用
unpack工具生成新域:
<WebLogic安装目录>/common/bin/unpack.sh -template=<模板jar完整路径> -domain=<新域要创建的完整路径>
用这种方式生成的域,所有路径配置都会自动适配新位置,不会出现残留路径的问题。
4. 部署时使用绝对路径指定WAR包
如果是通过控制台部署WAR包,确保你选择的是新域所在机器上的WAR包文件,并且使用绝对路径来指定,不要用相对路径指向原域里的WAR包,避免路径解析混乱。
错误原因再补充下
WebLogic在部署应用时,会生成.appmergegen临时目录来合并WAR包和依赖JAR里的资源(比如web-fragment.xml这类文件),这个过程中会构建类似zip:../xxx/xxx.jar!/xxx的URL来访问资源,但Java的URL规范不允许在opaque部分(也就是zip:后面的部分)出现../这种相对路径,所以就抛出了你看到的非法字符错误。
内容的提问来源于stack exchange,提问作者Rahil

