WebSphere Liberty部署应用时JSP编译失败:目录缺失问题咨询
WebSphere Liberty JSP编译目录缺失问题解析与解决
为什么仅debug模式会自动创建目录?
Liberty的JSP编译逻辑中,debug模式下为了保留编译生成的Java源码以方便调试,会在AbstractJSPExtensionServletWrapper.java中主动执行mkdirs()确保存放生成文件的目录存在。而常规模式下,早期版本的设计默认假设编译目录已提前存在,或是省略目录创建步骤以追求编译效率,因此不会主动创建缺失的/jsp子目录。
常规模式下自动生成目录的解决方法
1. 显式配置JSP生成目录
在server.xml中配置JSP特性时,明确指定编译后类文件和源码文件的存放目录,Liberty会在启动时自动创建这些目录:
<featureManager> <feature>jsp-3.0</feature> <!-- 根据应用使用的JSP版本调整为jsp-2.2/jsp-2.3等 --> </featureManager> <jsp generatedClassesDirectory="${server.output.dir}/generated/jsp/classes" generatedSourcesDirectory="${server.output.dir}/generated/jsp/src" />
通过指定具体路径,会触发Liberty的目录初始化逻辑,避免缺失目录导致的编译失败。
2. 升级Liberty版本
部分旧版本的Liberty存在这个设计缺陷,后续发布的Fix Pack已经在常规模式下补上了自动创建目录的逻辑。检查当前Liberty版本,升级到最新的稳定版可以直接解决该问题。
3. 预创建目录(临时方案)
如果暂时无法升级或修改配置,可以在Liberty的临时工作目录(默认位于${server.config.dir}/../workarea下)中预先创建缺失的/jsp子目录,不过这种方法需要每次部署或清理临时文件后重复操作,仅作为应急方案。
内容的提问来源于stack exchange,提问作者Robin D.
相关产品推荐
相关产品推荐

