IntelliJ IDEA 与 Eclipse 的 Maven 嵌套多模块项目中的 Jetty 资源库不同
Jetty resource base different in Maven Nested Multi-module project of IntelliJ IDEA vs Eclipse
我们有一个嵌套的多模块项目。我们的开发人员混合了 IntelliJ IDEA 和 Eclipse 用户。
当 运行 内部模块中的码头服务器时,似乎我们需要根据使用的 IDE 将资源库设置为不同的值。
对于 IntelliJ:
root.setResourceBase("myModule/src/main/webapp");
对于 Eclipse:
root.setResourceBase("src/main/webapp");
我们不想调整我们的 IDE 来让它工作,例如我不想更改 IntelliJ 中的某些设置以使其适用于 Eclipse 版本的代码。
有什么想法吗?
简答:
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 in the embedded-jetty-live-war 示例中的操作模式。
我们有一个嵌套的多模块项目。我们的开发人员混合了 IntelliJ IDEA 和 Eclipse 用户。
当 运行 内部模块中的码头服务器时,似乎我们需要根据使用的 IDE 将资源库设置为不同的值。
对于 IntelliJ:
root.setResourceBase("myModule/src/main/webapp");
对于 Eclipse:
root.setResourceBase("src/main/webapp");
我们不想调整我们的 IDE 来让它工作,例如我不想更改 IntelliJ 中的某些设置以使其适用于 Eclipse 版本的代码。
有什么想法吗?
简答:
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 in the embedded-jetty-live-war 示例中的操作模式。