Jetty资源库在Intelliven IDEA与Eclipse的Maven嵌套多模块项目中有所不同

时间:2016-07-13 19:52:37

标签: java eclipse maven intellij-idea jetty

我们有一个嵌套的多模块项目。我们的开发人员是IntelliJ IDEA和Eclipse用户的混合体。

在内部模块中运行jetty服务器时,我们似乎需要根据我们使用的IDE将资源库设置为不同的值。

对于IntelliJ:

root.setResourceBase("myModule/src/main/webapp");

对于Eclipse:

root.setResourceBase("src/main/webapp");

我们不想调整我们的IDE以使其工作,例如我不想在IntelliJ中更改某些设置以使其与Eclipse版本的代码一起使用。

有什么想法吗?

1 个答案:

答案 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中的操作模式。