我在/srv/jetty
的CentOS上安装了一个jetty 9,我在jetty中部署了一个webapp。
当我用java -jar start.jar &
启动jetty然后在Web应用程序中我可以这样做:
File base = new File(".");
System.out.println("Base Dir: " + base.getAbsolutePath());
它返回了我正确的码头安装目录。
但后来我将jetty添加为linux服务,与一个名为jetty的用户一起运行,然后以service jetty start
开始,然后调用上面的代码,总是会回到用户的主目录,正在运行在本例中为jetty /home/jetty/
或者如果我以root身份运行/root/
如何设置jetty以找到正确的目录?我在配置文件中尝试使用jetty.home,但似乎没有任何效果。
答案 0 :(得分:1)
你有几件事需要担心。
Jetty上WebApp的值得注意的路径:
ServletContext Real Path
部署和启动的所有WebApp将占用工作目录或临时目录(在容器的一时兴起)。 servlet规范要求通过该webapp的ServletContext可以发现此路径。您可以通过致电ServletContext.getRealPath("/")
有关配置此work / temp目录的5种不同方法,请参阅我之前的回答: https://stackoverflow.com/a/19232771/775715
Jetty Home
默认情况下,所有Jetty Distribution实例都将具有一个名为jetty.home
的系统属性,该属性将成为磁盘上Jetty Home位置的路径。这被认为是找到Jetty Binaries和Distribution配置的地方。
Jetty Base
从Jetty 9.1开始,还有一个名为jetty.base
的强制系统属性,它是您的特定jetty配置实例+库+ webapps的所在地。这通常与jetty.home
不同。
二进制文件与配置的分离是Jetty 9.1的核心概念,采用明确的分离将使Jetty二进制文件的升级变得容易。
请参阅http://www.eclipse.org/jetty/documentation/current/startup-base-and-home.html
答案 1 :(得分:0)
我找到了简单的答案:
usermod -m -d /srv/jetty jetty
正如在互联网上的许多地方所建议的那样,我创建了一个用户码头来运行码头服务。无论我做了什么 - 即使我设置JETTY_LOGS-日志文件总是在用户主目录中结束。通过修改jetty用户主目录File(".")
和日志都会结束我想要的地方