编辑:我重写了问题以包含最新发现并删除已解决的问题。
我正在开发myapp
以前由我的同事创建的 servlet 应用程序。我在 Debian 下开发和运行它,我使用的 Tomcat 服务器是 6 版。
在此应用程序中,使用了三个文件:
myapp-database.db - sqlite file, if is is not present application creates it
myapp-log.xml - log file, it is opened/created by the application
myapp-config.xml - configuration files, included in /usr/main/resources
如果我在安装在我的主目录中的 Eclipse-inner-Tomcat 上运行它,文件:myapp-database.db
和myapp-log.xml
直接在我的主目录中创建。
如果我将应用程序部署到使用 aptitude 安装的系统 Tomcat 时,此文件会出现问题。它显示在catalina.out
:
Error while initialising logger: mylog.xml
java.io.IOException: Couldn't get lock for mylog.xml
...
SEVERE: couldn't initialize database:
opening db: 'mydb.db': Permission denied
java.sql.SQLException: opening db: 'mydb.db': Permission denied
...
我像这样部署应用程序:
sudo cp myapp.war /var/lib/tomcat6/webapps/
然后我无法打开系统Tomcat。如果我从中删除应用程序webapps
就可以了。
我在磁盘上的某个地方制作了目录并将所有者更改为 tomcat。我将代码中的文件名更改为绝对路径,以便在目录中创建它们。Tomcat 打开并且没有崩溃,文件是在那里创建的。
这是处理这个问题的正常方式吗?完全在tomcat之外创建应用程序文件?我认为这使应用程序的可移植性降低/更难安装。
也许我应该把文件放在/usr/main/resources
哪个myapp-config.xml
工作正常?但我不太确定如何让路径指向它们?我也不喜欢这个解决方案,因为如果文件不存在,应用程序应该创建文件。