在运行期间在eclipse中更新嵌入式jetty webapp

时间:2015-10-14 21:41:53

标签: java eclipse maven jetty embedded-jetty

我们有一个maven生成的webapp,它运行在嵌入式Jetty服务器中,所有这些都塞进了胖罐子里。 这似乎工作正常,但我们的UI开发人员不高兴,因为在做他的UI东西时,他想要更改他的代码,而不必重新启动webapp让它显示出来。在我做了所有的jar之前,它就像那样工作。 我们在pom中有一个资源部分,如下所示:

    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
        <resource>
            <directory>src/main/webapp</directory>
            <targetPath>webapp</targetPath>
        </resource>
    </resources>

我们已经确定了似乎正在发生的事情是eclipse正在将webapp复制到其在目标中的位置,然后从那里执行。我想,他想要的是让eclipse使用src文件夹中的webapp源,并且只在打包部署时复制webapp。

将此设置为以预期方式工作的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您有一个拆分资源方案。

传统上,WebApp有一个地方,即webapp资源库(Jetty中的WebAppContext.setBaseResource())。这是从中加载所有静态内容WEB-INF元数据(xml),WEB-INF/classesWEB-INF/lib/*.jar文件的位置。

在您的方案中,您要从target/mywebapp-1.0-SNAPSHOT(由maven-war-plugin ${webappDirectory}定义的实际路径)加载所有内容

这是生产容量WebAppContext的典型和正常行为,因为它配置为使用简单的 War path Base Resource 。但是,您正在编辑src/main/webapp/目录中的文件(由maven-war-plugin的${warSourceDirectory}定义的实际路径),该文件不是 Base Resource 目录的一部分。

您需要做的是忽略${webappDirectory}中的静态内容,并使用${warSourceDirectory}中的静态内容用于WebAppContext.setBaseResource(),并使用类和jar(maven依赖项) )来自${baseResource}/WEB-INF/classes${baseResource}/WEB-INF/lib

之外

一般技术:

WebAppContext context = new WebAppContext();
context.setContextPath("/");

switch (getOperationalMode())
{
    case PROD:
        // Configure as WAR
        context.setWar(basePath.toString());
        break;
    case DEV:
        // Configuring from Development Base
        context.setBaseResource(new PathResource(basePath.resolve("src/main/webapp")));
        // Add webapp compiled classes & resources (copied into place from src/main/resources)
        Path classesPath = basePath.resolve("target/thewebapp/WEB-INF/classes");
        context.setExtraClasspath(classesPath.toAbsolutePath().toString());
        break;
    default:
        throw new FileNotFoundException("Unable to configure WebAppContext base resource undefined");
}

对于live version of this behavior,请参阅Eclipse Jetty项目团队维护的embedded-jetty-live-war example project

答案 1 :(得分:1)

我不确定这是Maven POM问题。这不仅仅是为了包装吗?

您使用的资源库是什么? WebAppContext的setResourceBase需要设置为Web应用程序的根目录。