我有一个可行的解决方案 – 我正在发布的解决方案,希望这种方法能激发正确的方法.我仍然认为应该有一种方法来指定JAR中相对于JAR的文件夹.
无论如何这种方法有效.我用它来从JAR内部服务静态Web内容.基本上我有Java解析正在运行的JAR资源的绝对路径,并将该路径名传递给Jetty.当我这样做Jetty显示我的“helloWorld.html”,欢迎文件.
String baseStr = "/webapp"; //... contains: helloWorld.html, login.html, etc. and folder: other/xxx.html
URL baseUrl = SplitFileServerRunner.class.getResource( baseStr );
String basePath = baseUrl.toExternalForm();
....
resource_handler.setDirectoriesListed(true); //... just for testing
resource_handler.setWelcomeFiles(new String[]{ "helloWorld.html" });
resource_handler.setResourceBase( basePath );
LOG.info("serving: " + resource_handler.getBaseResource());
在欢迎文件中,我已经放置了特定的文本来标识文件的来源(在资源文件夹中).在浏览器中:
> localhost:8080
提供helloWorld.html文件.
> localhost:8080 /其他
显示JAR文件中jar:/ webapp / other /目录的目录列表.这依赖于在服务器运行时不更改JAR.
在Linux上,如果有人在正在运行的JAR上运行一个新的jar文件,Jetty会给出:
HTTP ERROR: 500
Problem accessing /. Reason:
java.lang.NullPointerException
而且你不能再访问页面了.这是出乎意料的(显然JAR保持开放).好消息是,如果你mv -s jarfile:
> mv fileserver.jar fileserverXX.jar
Jetty愉快地从(重命名的)fileserverXX.jar内容继续提供服务.我很高兴.但是,我仍然想知道匹配绝对文件名的等效相对路径.