如何设置jetty.home嵌入式码头与maven

时间:2016-09-07 09:26:33

标签: maven jetty war embedded-jetty

我正在使用jetty-server:9.2.11并且我希望在我的嵌入式jetty应用程序中有一个用于war部署的webapps目录,就像我们在使用独立的jetty服务器时一样。我阅读了一些文档并找到了#34; 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依赖项。我有点卡在这里做我的配置,以便#34; jetty.home"对于我的嵌入式码头应用程序,因为我没有使用任何标准的码头分配。我只有单独的罐子。

2 个答案:

答案 0 :(得分:1)

使用时,

jetty.home几乎没有意义。

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

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

为了取得一定的成功,你需要了解Jetty如何运作和运作,并专注于DeploymentManagerWebAppContext

虽然LikeJettyXml向您展示了一些功能,但它从码头分布的角度展示了它,而不是嵌入式码头。

例如:

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

希望这会有所帮助,请花些时间真正了解部署在Jetty中的工作方式(DeploymentManager的javadoc做了很好的解释)。

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

你想了解:

  • Jetty组件LifeCycle
  • DeploymentManager角色
  • 部署AppLifeCycle
  • AppProvider角色
  • WebAppContext
  • 服务器/ WebAppContext Configuration
  • WebAppContext Initialization LifeCycle

答案 1 :(得分:1)

通过一些研究我从jetty-like.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("webapps");
    webapp_provider.setScanInterval(1);
    webapp_provider.setExtractWars(true);
    webapp_provider.setConfigurationManager(new PropertiesConfigurationManager());

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

看这里不需要jetty_base或jetty_home

webapp_provider.setMonitoredDirName(" web应用&#34);