как установить jetty.home Встроенный причал с maven

67
7

Я использую jetty-сервер: 9.2.11, и я хочу иметь каталог webapps для развертывания войны в моем встроенном приложении причала, как у нас, когда вы используете автономный причал. Я прочитал некоторую документацию и нашел программную конфигурацию "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", но у меня есть только файлы jar, связанные с приложением, в моем каталоге lib, которые копируются как зависимости maven. Я как бы застрял здесь, чтобы выполнить свою конфигурацию, чтобы иметь "jetty.home" для моего приложения с приложенным приложением, потому что я не использую стандартное распределение причала. У меня есть только отдельные банки.

спросил(а) 2016-09-07T12:26:00+03:00 3 года, 10 месяцев назад
1
Решение
55

jetty.home имеет очень мало смысла при использовании embedded-jetty.

LikeJettyXml точно соответствует его названию, его java-версия jetty- дистрибутива и etc/jetty-*.xml файлов, все, что она есть и утверждает.

Если вы хотите настроить каталог webapps (aka DeploymentManager с помощью WebAppProvider), тогда сделайте именно это.

Чтобы добиться определенного успеха, вам нужно понять довольно приличную информацию о том, как Jetty работает и функционирует, уделяя особое внимание DeploymentManager и WebAppContext.

Хотя LikeJettyXml показывает вам некоторые функции, он показывает вам это с точки зрения распределения jetty-, а не встроенного причала.

Например:

    в дистрибутиве jetty- есть etc/webdefault.xml, на который ссылается setDefaultsDescriptor(), но это не требуется для установки, поскольку DeploymentManager может просто использовать тот же файл webdefault.xml, который существует в файлах jar. в дистрибутиве jetty- есть jetty.base, который может предварительно создать ${jetty.base}/webapps при включении модуля deploy. Этот каталог, концепция jetty.base, идея и особенности модулей и даже имя webapps являются произвольными и не должны существовать таким образом для встроенных пристаней. Сделайте этот каталог в любом месте, где бы вы его ни хотели, назовите его, как бы вы ни хотели. scanInterval, extractWars, ConfigurationManager являются необязательными. на самом деле, единственными конфигурациями, которые являются обязательными, являются setMonitoredDirName и setContexts установка ContainerIncludeJarPattern не требуется для большинства встроенных настроек (см. другие вопросы о stackoverflow для этого атрибута) установка свойств системы также бессмысленна для встроенных причалов, ничто в встроенных причалах не использует эти свойства (эти свойства существуют исключительно для распределения jetty-, его start.jar и различных ${jetty.home}/etc/*.xml файлы)

Надеемся, что это поможет, и, пожалуйста, найдите время, чтобы действительно понять, как развертывания работают в Jetty (javadoc для DeploymentManager делает достойную работу, объясняя это).

Развертывание может быть большой темой, поэтому попытка охватить все это в одном ответе stackoverflow выходит за рамки.

Вы захотите понять:

    Жизненный LifeCycle компонента Jetty Роль DeploymentManager Цикл развертывания AppLifeCycle Роль AppProvider WebAppContext WebAppContext Configuration Server/WebAppContext Жизненный цикл инициализации WebAppContext

ответил(а) 2016-09-08T03:41:00+03:00 3 года, 10 месяцев назад
55

с небольшим количеством исследований я отфильтровал то, что мне нужно для своей цели, от 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( "WebApps");

ответил(а) 2016-09-12T12:21:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема