Чистая конфигурация Jetty для разработки? - PullRequest
2 голосов
/ 11 февраля 2011

РЕДАКТИРОВАТЬ : Я думаю, что я должен уточнить свои намерения ...

Я пытаюсь упростить цикл итераций разработки кода записи >> build WAR >> deploy >> refresh >> repeat. Я хотел бы быть относительно независимым от IDE (то есть я не хочу, чтобы надстройки Eclipse или IntelliJ выполняли свою работу). Я хочу иметь возможность редактировать кодовые / статические файлы и собирать их по мере необходимости в моем исходном каталоге WAR, и просто выполнить настройку / debug в качестве вызова командной строки для централизованной установки Jetty.

Позже я хотел бы иметь возможность выполнить фактическое развертывание, используя, как правило, ту же настройку, но с упакованным WAR. Я не хочу, чтобы код моего приложения относился к моей IDE или Jetty.

Так что, возможно, лучший способ задать этот вопрос - Какой самый чистый способ использовать Jetty в качестве сервера приложений для разработки и отладки?


Скажем, я хочу установить минимальную версию Jetty 7. Я хочу как можно меньше конфигурации XML, мне просто нужен сырой API сервлетов, без JSP, без фильтрации и т. Д. Я просто хочу иметь возможность иметь несколько пользовательских сервлетов и обрабатывать статические файлы, если они существуют. Это будет единственная WAR, и она будет использоваться в качестве корня для данного порта.

В идеале, для простоты развертывания я бы хотел, чтобы каталог Jetty был просто стандартной загрузкой, а моя конфигурация WAR / XML была отделена от этих стандартных файлов Jetty. В моем вызове Jetty я хотел бы передать этот минимальный XML и перейти.

Я обнаружил, что документация повсюду, и большая ее часть предназначена для Jetty 6 или специфична для различных других пакетов (Spring и т. Д.). Я полагаю, если у меня будет эта минимальная конфигурация, то добавление дополнительных абстракций сверху будет намного чище. Также это позволит мне более четко разобраться со сценариями встроенных Jetty.

Этот вопрос SO является примером сценария, в котором этот XML был бы полезен Jetty Run War Использование только командной строки

Каким будет минимальный XML, необходимый для указания этого одного местоположения WAR и хостов / порта для его обслуживания?

Заранее спасибо за любые фрагменты или ссылки.

Ответы [ 5 ]

4 голосов
/ 11 февраля 2011

Причал мигрировал в Eclipse.Об этом очень тонкая информация.Это также привело к изменению имени пакета, что является еще одним уровнем нюансов.Они опубликовали утилиту для преобразования настроек Jetty6 в настройки Jetty 7, но опять же - не очень популярно.Я разочарован в форуме Eclipse Jetty.Здесь вы должны искать документацию по Jetty 7 и далее http://wiki.eclipse.org/Jetty/Starting

Я думаю, что это минимальный jetty.xml взятый из http://wiki.eclipse.org/Jetty/Reference/jetty.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">\ 
<Configure id="Server" class="org.eclipse.jetty.server.Server">
</Configure>

Но я бы предпочелначать с копии $JETTY_HOME/etc/jetty.xml и изменить ее оттуда.

Если у вас все в порядке с каталогом $JETTY_HOME/webapps, вы можете настроить порт, изменив эту часть

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    ...
    <Call name="addConnector">
      <Arg>
          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="7777"/></Set>
            <Set name="maxIdleTime">300000</Set>
            <Set name="Acceptors">2</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
        <Set name="lowResourcesConnections">20000</Set>
        <Set name="lowResourcesMaxIdleTime">5000</Set>
          </New>
      </Arg>
    </Call>
    ....
</Configure>

Иначе я изменю context.xml способ, описанный здесь (для Jetty 7) Как обслуживать веб-приложение A из порта A и веб-приложение B из порта B

Также см. Эти страницы:

.... Редактировать # 1: извините за неправильный URL для веб-приложения в соответствии сразъем.Я обновил ссылку на Как обслуживать веб-приложение A из порта A и веб-приложение B из порта B , чтобы указывать на документ, предназначенный для Jetty 7.


Обновление о том, «как вы работаете с Jetty в различных средах?»

Dev

Мы используем Maven, поэтому Embed Jetty работает для нас.Мы просто запускаем mvn clean install run:jetty, и порт настраивается в конфигурационном файле Maven, а именно pom.xml.Это не зависит от IDE, плюс Jetty можно легко внедрить с помощью ANT, но я никогда не пытался.

Тест

У нас есть автономный JettyБег.Я настроил порт и настроенные параметры, удалил приложения по умолчанию (например, root.war и т. Д.) И создал context.xml с портами для конкретных приложений и каталогом развертывания.(К сожалению, я задал этот вопрос в списке рассылки Eclipse Jetty, и никто не удосужился ответить).Это однократная настройка.

Для тестовых сборок / развертываний у нас есть скрипт сборки, который создает WAR согласно спецификациям тестовой среды и затем загружает его в тестовую среду.После этого мы вызываем сценарий оболочки, который (1) останавливает Jetty, (2) копирует военный файл в директиву webApp для myApp и (3) перезапускает Jetty.

Однако проще сделать это с помощью Maven's Cargo.плагин.Неудача заключалась в том, что я использовал Jetty 7.1.6, который был несовместим с Cargo.Позже они это исправили, но я выполнил свою работу с помощью пользовательского скрипта.

Prod

Prod имеет почти ту же процедуру, что и test, за исключением.Настройки сделаны для большей безопасности и распределения нагрузки.Но от развертывания POV нет ничего отличного от Test case и Prod.

Обратите внимание, что я не беспокоился о том, что такое XML-файлы и сколько их должно быть.Я только что использовал те, которые меня беспокоят - jetty.xml и context.xml.Кроме того, я обнаружил, что гораздо удобнее использовать jetty.conf и jetty.sh для передачи параметров JVM, пользовательских XML-файлов, а также для запуска и остановки.

Надеюсь, это поможет.


При горячем развертывании:

Теперь, если вы используете Maven и используете встроенный Jetty.Он просто знает, когда код изменяется - например, «перехватчик выстрела».В dev envt вы запускаете Jetty, вносите изменения, обновляете страницу и видите свои изменения - горячее развертывание .Найти больше здесь http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin искать scanIntervalSeconds

3 голосов
/ 11 февраля 2011

Это не полностью отвечает на ваш вопрос, но в случае, если это поможет, вот небольшой код, использующий встроенную Jetty 7 для запуска сервера с одним корневым сервлетом:

    HandlerCollection handlers = new HandlerCollection();
    ServletContextHandler root = new ServletContextHandler(handlers, "/", ServletContextHandler.NO_SESSIONS|ServletContextHandler.NO_SECURITY);
    root.addServlet(new ServletHolder(new MyServlet()), "/*");

    Server server = new Server(8080);
    server.setHandler(handlers);
    server.start();

Смотри конечно http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty.

0 голосов
/ 14 мая 2013

Я бы использовал Gradle и сканировал выходную папку сборки каждые несколько секунд на наличие изменений в сборке.

В файле build.gradle:

apply plugin: 'jetty'

...

jettyRun.doFirst {
    // set system properties, etc here for bootstrapping
}

jettyRun {
    httpPort = 8989
    reload = 'automatic'
    scanIntervalSeconds = 3
    daemon = false
}

Вот и все. Вы можете выбрать автоматическую сборку среды IDE и указать на этот каталог. Но вы также можете не делать этого. Это решение вообще не связано с IDE.

0 голосов
/ 17 июня 2012

Если вы строите с помощью Maven (который не зависит от IDE), вы должны отладить его с помощью плагина Maven Jetty.По сути, вы запускаете приложение как «mvn jetty: run» в командной строке, все это работает без перераспределения.Большинство хороших IDE имеют встроенную поддержку maven и позволяют запускать / отлаживать приложение как maven;это означает, что запускается maven, который запускает плагин Jetty, который запускает приложение, и вы можете отлаживать его.Поскольку все заканчивается в исходных папках IDE и папках bin, вам даже не требуется установка сервера Jetty.

Вот демонстрационный проект, который выполняется таким образом https://github.com/simbo1905/ZkToDo2/blob/master/commandline.build.and.run.txt, и вот как запустить его в eclipse https://github.com/simbo1905/ZkToDo2/blob/master/eclipse.indigo.build.and.debug.txt, но любая IDE, которая понимает maven, должна работать.Взгляните на pom.xml, где он устанавливает плагин maven jetty.

0 голосов
/ 27 июля 2011

Я думал, что буду обновляться с тем, что я сейчас делаю. Я написал крошечное приложение командной строки / архетип Maven, который работает так, как я думал, что все это должно иметь в первую очередь. Приложение начальной загрузки позволяет запустить выбранный контейнер сервлетов (Jetty, Tomcat, GlassFish), просто передав ему путь к WAR и вашему порту.

Используя Maven, вы можете создать и упаковать свой собственный экземпляр этого простого приложения:

mvn archetype:generate \
    -DarchetypeGroupId=org.duelengine \
    -DarchetypeArtifactId=war-bootstrap-archetype \
    -DarchetypeVersion=0.2.1

Затем вы запускаете это так:

java -jar bootstrap.jar -war myapp.war -p 8080 --jetty

Вот источник утилиты и архетипа: https://bitbucket.org/mckamey/war-bootstrap

...