我正在使用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"对于我的嵌入式码头应用程序,因为我没有使用任何标准的码头分配。我只有单独的罐子。
答案 0 :(得分:1)
jetty.home
几乎没有意义。
LikeJettyXml
正如其名称所暗示的那样,它是jetty-distribution的etc/jetty-*.xml
文件的java版本,这就是它所声称的全部内容。
如果您想设置一个webapps
目录(又名DeploymentManager
与WebAppProvider
),那么就这样做。
为了取得一定的成功,你需要了解Jetty如何运作和运作,并专注于DeploymentManager
和WebAppContext
。
虽然LikeJettyXml
向您展示了一些功能,但它从码头分布的角度展示了它,而不是嵌入式码头。
例如:
etc/webdefault.xml
被setDefaultsDescriptor()
调用引用,但不需要设置,因为DeploymentManager
只能使用相同的webdefault.xml而是存在于jar文件中。${jetty.base}/webapps
模块时预构建deploy
目录。该目录,jetty.base的概念,模块的概念和特性,甚至名称webapps
都是任意的,并且不需要以嵌入式码头的方式存在。将该目录设置在您想要的任何位置,根据您的心愿命名。scanInterval
,extractWars
,ConfigurationManager
都是可选的。事实上,唯一的强制配置是setMonitoredDirName
和setContexts
ContainerIncludeJarPattern
(请参阅有关该属性的stackoverflow的其他问题)${jetty.home}/etc/*.xml
文件)希望这会有所帮助,请花些时间真正了解部署在Jetty中的工作方式(DeploymentManager
的javadoc做了很好的解释)。
部署可能是一个很大的主题,因此尝试在单个stackoverflow答案中覆盖所有内容都超出了范围。
你想了解:
LifeCycle
DeploymentManager
角色AppLifeCycle
AppProvider
角色WebAppContext
WebAppContext
Configuration
类答案 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);