我们有一个嵌套的多模块项目。我们的开发人员是IntelliJ IDEA和Eclipse用户的混合体。
在内部模块中运行jetty服务器时,我们似乎需要根据我们使用的IDE将资源库设置为不同的值。
对于IntelliJ:
root.setResourceBase("myModule/src/main/webapp");
对于Eclipse:
root.setResourceBase("src/main/webapp");
我们不想调整我们的IDE以使其工作,例如我不想在IntelliJ中更改某些设置以使其与Eclipse版本的代码一起使用。
有什么想法吗?
答案 0 :(得分:1)
简短回答:
Eclipse与Intellij之间的执行差异可以通过使用不同的PWD或$ {user.dir}或工作目录设置来解释。
更好的答案:
然后不要使用文件系统路径。
通过Classloader.getResource()
在该位置查找已知资源,然后将父目录传递到root.setResourceBase()
示例:
Server server = new Server(8080);
// Figure out what path to serve content from
ClassLoader cl = WebAppContextFromClasspath.class.getClassLoader();
// We look for a file, as ClassLoader.getResource() is not
// designed to look for directories (we resolve the directory later)
URL f = cl.getResource("hello.html");
if (f == null)
{
throw new RuntimeException("Unable to find resource directory");
}
// Resolve file to directory
URI webRootUri = f.toURI().resolve("./").normalize();
System.err.println("WebRoot is " + webRootUri);
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar(webRootUri.toASCIIString());
webapp.setParentLoaderPriority(true);
server.setHandler(webapp);
server.start();
server.join();
您可以在embedded-jetty-cookbook示例中看到这一点:
另一个更好的答案:
另一种方法是根据运行方式找到src/main/webapp
几种不同的方法
请参阅ServerMain.java示例中的embedded-jetty-live-war中的操作模式。