最近,将Windows下开发的war包部署到Linux下的Tomcat时报了一个错误:tomcat error in opening zip file。按理说,如果正常,当把war包复制到webapps目录下时,会自动解压缩到与包名同名的文件夹下,但是事实并没有解压缩。所以到logs文件夹下看,报了上面的错误。
百度一下,可能是java版本与Tomcat版本和Linux下的不一致,一看,果然不一致,但其实版本都很接近,而且,询问之前的开发人员,他们的war包是可以自动解压缩的,也就是说不是版本的问题。还有就是通过ftp上传文件时没有使用二进制的传送方式,这个也不是原因,因为我用的就是binary模式。那到底是什么原因?然后我又仔细看了一下报错的信息,发现有一个是unreadable!为什么会是没有办法读呢?我潜意识相当可能是文件的权限问题。
果断ls -lt,看一下所有文件的权限,
第一列:drwxr-xr-x代表文件的类型及权限
以d开头的为文件夹,以-开头的为文件,
以l开头的为连接文件
再细分,d后面其实是3个组合,每一个组合有rwx构成,分别表示文件拥有者的权限,组的权限和其他用户的权限
第2列:文件的链接数.
第3、4列:分别代表拥有文件的用户和组
第5列:文件的大小。
第6列:文件最后的修改时间。
第7列:文件名
原先ICardSys.war是-rw-r-----,也就是除了root用户和system组之外,其他用户都无法读。所以,我想着应该给其他用户加一个读的权限,这样也行可以解决unreadable的问题。文件权限修改,需要用到chmod,r代表4,w代表2,x代表1,比如rwx就用7来表示,所以我们chmod 644 ICardSys.war一下试一试。此时,发现可以自动解压war包了,而且也多了新生成的文件夹。
到此该问题解决,但其实不难发现,同一种错误的原因可能是多种多样的,网上的也无法能解决你的问题,还是要自己去思考。
参考文献:
http://www.cnblogs.com/wangyuyu/p/3900098.html
http://jingyan.baidu.com/article/8cdccae963e442315413cd01.html