Tomcat使用项目目录作为相对路径

Tomcat使用项目目录作为相对路径,tomcat,path,jvm,Tomcat,Path,Jvm,我有一个GWT web应用程序,它在相对目录“cache”下的磁盘上创建一个缓存。在eclipse中的JUnit测试中,它可以工作,但当我在Tomcat中部署它时,程序仍然尝试在/home/username/projects/myproject/cache(真实路径重命名)中创建文件,而不是/var/lib/tomcat7/webapps/myproject/cache,因为它在那里没有文件写访问权限,所以崩溃。创建缓存的代码是一个外部库,因此它甚至不能硬编码 这可能是一个象征性的联系吗?或者T

我有一个GWT web应用程序,它在相对目录“cache”下的磁盘上创建一个缓存。在eclipse中的JUnit测试中,它可以工作,但当我在Tomcat中部署它时,程序仍然尝试在
/home/username/projects/myproject/cache
(真实路径重命名)中创建文件,而不是
/var/lib/tomcat7/webapps/myproject/cache
,因为它在那里没有文件写访问权限,所以崩溃。创建缓存的代码是一个外部库,因此它甚至不能硬编码

这可能是一个象征性的联系吗?或者Tomcat和Eclipse可以共享一个JVM吗? 这个错误快把我逼疯了

错误消息

org.h2.jdbc.JdbcSQLException: Fehler beim Erzeugen der Datei "/home/username/projects/myproject/cache"
Error while creating file "/home/username/projects/myproject/cache" [90062-143]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:167)
    at org.h2.message.DbException.get(DbException.java:144)
    at org.h2.store.fs.FileSystemDisk.createDirs(FileSystemDisk.java:368)
    at org.h2.store.FileLock.lockFile(FileLock.java:328)
    at org.h2.store.FileLock.lock(FileLock.java:134)
    at org.h2.engine.Database.open(Database.java:525)
    at org.h2.engine.Database.openDatabase(Database.java:208)
    at org.h2.engine.Database.<init>(Database.java:203)
    at org.h2.engine.Engine.openSession(Engine.java:53)
    at org.h2.engine.Engine.openSession(Engine.java:147)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:126)
    at org.h2.engine.Engine.createSession(Engine.java:109)
    at org.h2.engine.Engine.createSession(Engine.java:27)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:289)
    at org.h2.engine.SessionRemote.createSession(SessionRemote.java:265)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:110)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94)
    at org.h2.Driver.connect(Driver.java:73)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:221)
org.h2.jdbc.jdbcsqleexception:Fehler beim Erzeugen der Datei”/home/username/projects/myproject/cache
创建文件“/home/username/projects/myproject/cache”时出错[90062-143]
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
位于org.h2.message.DbException.get(DbException.java:167)
位于org.h2.message.DbException.get(DbException.java:144)
位于org.h2.store.fs.FileSystemDisk.createDirs(FileSystemDisk.java:368)
位于org.h2.store.FileLock.lockFile(FileLock.java:328)
位于org.h2.store.FileLock.lock(FileLock.java:134)
位于org.h2.engine.Database.open(Database.java:525)
位于org.h2.engine.Database.openDatabase(Database.java:208)
位于org.h2.engine.Database(Database.java:203)
位于org.h2.engine.engine.openSession(engine.java:53)
位于org.h2.engine.engine.openSession(engine.java:147)
位于org.h2.engine.engine.createSessionAndValidate(engine.java:126)
位于org.h2.engine.engine.createSession(engine.java:109)
位于org.h2.engine.engine.createSession(engine.java:27)
位于org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:289)
位于org.h2.engine.SessionRemote.createSession(SessionRemote.java:265)
JdbcConnection(JdbcConnection.java:110)
JdbcConnection(JdbcConnection.java:94)
位于org.h2.Driver.connect(Driver.java:73)
位于java.sql.DriverManager.getConnection(DriverManager.java:579)
位于java.sql.DriverManager.getConnection(DriverManager.java:221)
[…]请再试一次

String path = new File(servletContext.getRealPath("/cache")).getAbsolutePath()

谢谢,这是一个很好的规避问题的方法,但是为什么它首先会发生?因为它是硬编码的:啊,非常感谢!我解释了“jdbc:h2:当前(!)工作目录中的测试”关于
http://www.h2database.com/html/cheatSheet.html
作为jvm.P.S.的根目录:我现在得到一个异常
java.sql.SQLException:找不到适合jdbc的驱动程序:h2:/usr/share/tomcat7/webapps/myapplication/cache/httplivedbpediaorgsparql\u httpdbpediaorg;缓存大小=100000
。但是,当我在Junit中使用这个路径测试jdbc时,它是有效的。你是否碰巧也知道该怎么做?:-)