在 运行 期间更新 eclipse 中的嵌入式码头 webapp

updating embedded jetty webapp in eclipse during run

我们有一个 maven 生成的 web 应用程序,它运行在一个嵌入式码头服务器中,所有这些都被塞进一个胖罐子里。 这似乎工作正常,但我们的 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 复制到它在 target 中的位置,然后从那里执行。我认为他想要的是让 eclipse 使用 src 文件夹中的 webapp 源,并且只在打包部署时将 webapp 复制过来。

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

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

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

您有一个拆分资源方案。

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

在您的场景中,您正在从 target/mywebapp-1.0-SNAPSHOT 加载它(实际路径由 maven-war-plugin 的 ${webappDirectory} 定义)

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

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

外部的 jars(maven 依赖项)

一般技术:

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");
}

对于由 Eclipse Jetty 项目团队维护的 live version of this behavior, see the embedded-jetty-live-war example project