maven - 如何使用maven设置jetty.home嵌入式jetty

标签 maven jetty war embedded-jetty

我正在使用jetty-server:9.2.11,我希望在我的嵌入式jetty应用程序中有一个用于war部署的webapps目录,就像我们使用独立jetty服务器时那样。我阅读了一些文档,发现“Like Jetty XML”编程配置如下所示

    // Path to as-built jetty-distribution directory
    String jettyHomeBuild = "../../jetty-distribution/target/distribution";

    // Find jetty home and base directories
    String homePath = System.getProperty("jetty.home", jettyHomeBuild);
    File homeDir = new File(homePath);
    if (!homeDir.exists())
    {
        throw new FileNotFoundException(homeDir.getAbsolutePath());
    }
    String basePath = System.getProperty("jetty.base", homeDir + "/demo-base");
    File baseDir = new File(basePath);
    if(!baseDir.exists())
    {
        throw new FileNotFoundException(baseDir.getAbsolutePath());
    }

    // Configure jetty.home and jetty.base system properties
    String jetty_home = homeDir.getAbsolutePath();
    String jetty_base = baseDir.getAbsolutePath();
    System.setProperty("jetty.home", jetty_home);
    System.setProperty("jetty.base", jetty_base);







    // === jetty-deploy.xml ===
    DeploymentManager deployer = new DeploymentManager();
    deployer.setContexts(contexts);
    deployer.setContextAttribute(
            "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
            ".*/servlet-api-[^/]*\\.jar$");

    WebAppProvider webapp_provider = new WebAppProvider();
    webapp_provider.setMonitoredDirName(jetty_base + "/webapps");
    webapp_provider.setDefaultsDescriptor(jetty_home + "/etc/webdefault.xml");
    webapp_provider.setScanInterval(1);
    webapp_provider.setExtractWars(true);
    webapp_provider.setConfigurationManager(new PropertiesConfigurationManager());

    deployer.addAppProvider(webapp_provider);
    server.addBean(deployer);

但这里使用“jetty-distribution”,但我的 lib 目录中只有与 jetty 相关的 jar 文件,这些文件被复制为 Maven 依赖项。我有点被困在这里做我的配置,为我的嵌入式 jetty 应用程序设置“jetty.home”,因为我没有使用任何标准的 jetty 发行版。我只有单独的 jar 。

最佳答案

jetty.home 在使用 时意义不大。

LikeJettyXml 正如其名称所暗示的那样,它是 jetty-distribution 的 etc/jetty-*.xml 文件的 java 版本,这就是它的全部内容和声明是。

如果您想设置一个 webapps 目录(又名带有 WebAppProviderDeploymentManager),那么就这样做。

为了在这方面取得一些成功,您需要了解 Jetty 的运行和功能的相当多的内容,重点是 DeploymentManagerWebAppContext .

虽然LikeJettyXml向您展示了一些功能,但它是从jetty-distribution而不是嵌入式jetty的角度向您展示的。

例如:

  • jetty-distribution 有一个 etc/webdefault.xml,它由 setDefaultsDescriptor() 调用引用,但不需要设置,因为 DeploymentManager 可以只使用 jar 文件中存在的相同 webdefault.xml。
  • jetty-distribution 有一个 jetty.base,当您启用 deploy 模块时,它可以预先构建 ${jetty.base}/webapps 目录。该目录、jetty.base 的概念、模块的思想和功能,甚至名称webapps 都是任意的,对于嵌入式jetty 来说不需要以这种方式存在。将该目录放在您想要的任何位置,将其命名为您想要的任何名称。
  • scanIntervalextractWarsConfigurationManager 都是可选的。事实上,唯一必需的配置是 setMonitoredDirNamesetContexts
  • 大多数嵌入式 jetty 设置都不需要设置 ContainerIncludeJarPattern(有关该属性的信息,请参阅 stackoverflow 上的其他问题)
  • 设置系统属性对于embedded-jetty来说也是没有意义的,embedded-jetty中没有任何东西使用这些属性(这些属性仅存在于jetty-distribution、它的start.jar和各种${jetty.home}/etc/*.xml 文件)

希望这会有所帮助,并且请花一些时间来真正了解 Jetty 中的部署是如何工作的(DeploymentManager 的 javadoc 很好地解释了这一点)。

部署可能是一个很大的话题,因此尝试在一个 stackoverflow 答案中涵盖所有内容超出了范围。

你会想了解:

  • Jetty 组件LifeCycle
  • DeploymentManager 角色
  • 部署AppLifeCycle
  • AppProvider 角色
  • WebAppContext
  • 服务器/WebAppContext 配置
  • WebAppContext 初始化生命周期

关于maven - 如何使用maven设置jetty.home嵌入式jetty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39366095/

相关文章:

java - 如何从多个动态 Web 项目创建单个 war 文件

java - 将Wiremock部署到Weblogic作为 war 时的验证问题

maven - 如何使用 Maven 将生成的文件包含到 war 中,但不将其添加到源中

java - Camel Jetty session 在部署到 JAR 时停止工作

maven-2 - 使用maven和嵌入式jetty : ClassCastException

ssl - 为 Jetty 配置 SSL 密码套件

java - maven-release-plugin 标签创建

maven - Intellij Maven Repository 自签名证书,ssl 错误

java - 构建 Jersey 示例失败

maven - 您如何管理项目的依赖项(库)的许可证?