JFinal.start()如何用非当前项目的工作目录作为部署目录?

绝望的八皮 发布于 2013/01/24 00:21
阅读 3K+
收藏 0

JFinal.start(String webAppDir, int port, String context, int scanIntervalSeconds)

jfinal.start方法是利用当前工作空间作为部署目录,并且监控当前项目的WebRoot/WEB-INF/classes下文件变化来热加载的。


比如我有eclipse有两个项目,一个是jfinal-generator一个是demo.
我想在jfinal-generator这个项目里面通过一个main方法启动demo。

如果是在jfinal-generator中启动下面代码
JFinal.start(“WebRoot", 8080, "/generator", 5);

假如加载的是/home/kid/workspace/jfinal-generator/WebRoot下的内容,那么监控的是/home/kid/workspace/jfinal-generator/WebRoot/WEB-INF/classes下的classes变化

监控文件变化的目录可以通过修改以下代码实现

// configureScanner
if (scanIntervalSeconds > 0) {

Scanner scanner = new Scanner("新增一个参数传入", scanIntervalSeconds) {
public void onChange() {
try {
System.err.println("Loading changes ......");
webApp.stop();
webApp.start();
System.err.println("Loading complete.\n");
} catch (Exception e) {
System.err.println("Error reconfiguring/restarting webapp after change in watched files");
e.printStackTrace();
}
}
};
那么怎么设置webAppDir,才能做到在jfinal-generator中启动demo这个项目呢?

源代码相关部分如下

webApp = new WebAppContext();
		webApp.setContextPath(context);
		webApp.setWar(webAppDir);
		webApp.setInitParameter("dirAllowed", "false");
		webApp.setInitParameter("useFileMappedBuffer", "false");	// web.setInitParams(Collections.singletonMap("org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false"));
		server.setHandler(webApp);

似乎用到weAppdir这个变量就这里

webApp.setWar(webAppDir)

JFinal.start("WebRoot", 8080, "/demo", 5);
这样是加载的本项目而不能加载到demo这个项目。

但若我设置为绝对路径也无效

JFinal.start("/home/workspace/kid/demo/WebRoot", 8080, "/demo", 5);

会java.io.FileNotFoundException: /home/workspace/kid/demo/WebRoot.



加载中
1
a
alvinte

webApp.setWar(webAppDir);

这个貌似不是war文件,所以应该换个方法……比如setResourceBase……你懂得

感谢@JFinal 敬礼

a
alvinte
发现jetty源码里面应该setWar兼容setResourceBase的。你再看看你那个路径是不是写错了?
0
JFinal
JFinal
上次发给你的 JFinal 新版本不是已经用的 setBaseResource(...)了吗? 如果没有,找我拿一个最新版本
0
俸志刚
俸志刚
新版本什么时候发布啊?  
绝望的八皮
绝望的八皮
据小道消息说是最近哈哈
0
sjack
sjack
./ 强势围观、 希望能以简洁为准
返回顶部
顶部