一、问题描述
Mac Book 使用Idea 使用Resin服务器开发时,遇到了这么一个问题。
[2019.11.14 18:26:26.018]>>>>Xss(Exception):sw=com.caucho.jsp.JspParseException: javac: 无效的标记: IDEA.app/Contents/lib/idea_rt.jar:/Users/xxx/Library/Caches/IntelliJIdea2018.3/captureAgent/debugger-agent.jar ....略
[2019.11.14 18:26:26.021]用法: javac <options> <source files>
[2019.11.14 18:26:26.021]-help 用于列出可能的选项
一个时间跨度比较大的项目,使用了JSP
,web服务器使用的Resin 3.1.81
。
Resin
本身需要使用jdk环境,而不是jre环境。初次访问某jsp文件时,会进行编译(上述抛出的异常也说明了这个问题)。
二、问题定位
此错误明显是javac命令使用不当造成的,javac也提示了无效的标记
,说明命令中存在非法字符
(此处估计使用了Runtime
去执行javac
进行的编译操作)。
那么就debug找到执行此部分的代码,如图:
接下来的事情就简单了,复制到一个文本编辑器,查找异常信息中最前面的一段IDEA.app/Contents/lib/idea_rt.jar
,结果如下:
到这里问题就很明显了,因为IntelliJ Idea.app
在我的xos系统上有个空格,而且执行时没有将像图一那样进行URL编码%20
,所以出现了此问题。
三、解决
因为是Resin
中的jar,不想去改源码打包,所以把APP中的空格去掉了。IntelliJ IDEA.app
重命名为IntelliJIDEA.app
![IntelliJ IDEA.app](https://img-blog.csdnimg.cn/427bf90a4c0a426aaab864e688eb4e3a.png)
![IntelliJIDEA.app](https://img-blog.csdnimg.cn/5ec599be26494af68136b0f45ea4f7df.png)
其他解决办法也很多,比如用%20
代替空格,用引号将带空格的字符串引用都可以解决。
发现这个问题的解决后让我有点难受,所以写篇博客记一下。
34FA0B8B9A38EF653AF65DB0D9D7EE28