Eclipse + Tomcat - Подача webapp непосредственно из рабочего пространства

Каков идеальный способ настройки Tomcat для непосредственного использования в моем каталоге проектов внутри моего рабочего пространства? ()

Я хочу, чтобы мои статические веб-ресурсы были мгновенно доступны в любое время, когда я вношу им изменения, не публикуя их в отдельный каталог. Похоже, что наилучшим способом добиться этого является передача файлов напрямую, а не опубликованная/развернутая копия файла.


В качестве альтернативы я открыт для других вариантов (разные серверы приложений или среды IDE), которые значительно ускоряют разработку веб-приложений Java. Публикация и перераспределение каждого небольшого изменения - это слишком много времени.

Я пробовал JRebel и FileSync (и они оба работают в определенной степени), но они пытаются и исправляют проблему, которая не должна существовать.

Ответ 1

Мне никогда не нравился плагин WTP, который поставляется в комплекте с Eclipse.

В прошлом у меня был большой успех с плагин Sysdeo Tomcat для Eclipse.

Он использует скомпилированные классы, которые Eclipse создает для вас, поэтому, когда вы выполняете изменение, совместимое с интерфейсом (например, смену некоторых вещей внутри метода), это немедленно развертывается без необходимости перезапуска. Изменение сигнатур метода или добавление новых методов в класс требуют перезапуска, но поскольку нет продолжительного шага ВОССТАНОВЛЕНИЯ, весь цикл сборки/развертывания все равно сокращается.

Кроме того, плагин Sysdeo использует статические активы из вашей рабочей области, поэтому нет необходимости копировать или развертывать их. Просто внесите изменения, обновите свой браузер и сразу увидите изменения.

К сожалению, это похоже на то, что разработка плагина остановилась пару лет назад. Последняя поддерживаемая версия Eclipse, согласно матрице на их веб-сайте, составляет 3,6. Согласно этой странице, плагин по-прежнему работает с Eclipse 4.2 (Juno).

Надеюсь, это поможет. Использование Sysdeo действительно намного приятнее, чем WTP!

Ответ 2

Я не хочу снимать рекламу, но Netbeans IDE поддерживает все это из коробки, никаких плагинов не нужно, это также включает предварительно сконфигурированный tomcat;

Он поддерживает копирование статических ресурсов при сохранении, поэтому нет необходимости перестраивать все ваше приложение:

enter image description here

Как и для любых изменений java, если вы находитесь в режиме отладки, есть кнопка Apply Code Changes, которая будет перестраивать и разворачивать ваши измененные файлы (при условии, что никаких структурных изменений не было сделано)

или, альтернативно, использовать JRebel (для развертывания измененных java файлов), который имеет отличные функции

Ответ 3

Я уверен, что Maven может делать такие вещи. Возможно, есть даже Archetypes для Tomcat, которые уже настроены таким образом.

Я использую Архетип Maven вместе с JBoss AS. Когда я меняю свой файл .css или .xhtml или любые другие статические ресурсы и сохраняю его в Eclipse, ресурсы немедленно синхронизируются с моим развертыванием.

Edit:

Вот краткое руководство для моего решения:

Что я использую:

  • JBoss AS 7.1.1
  • Eclipse Juno для разработчиков Java EE

Более старые или более новые версии также должны выполнять эту работу.

  • Установите JBoss Tools Plug-In на Eclipse Marketplace в Eclipse IDE
    Это установит несколько подключаемых модулей в вашу среду IDE, например, JBoss AS Server Connector или Maven.
  • Добавить репозитории JBoss в вашу конфигурацию Maven
    Окно → Настройки → Maven → Настройки пользователя → открыть файл
    Добавить репозитории из JBoss Maven Начало работы
  • Добавить JBoss Server Runtime
    Окно → Настройки → Серверы → Временные среды

    Следуйте за Мастером, довольно стандартный
  • Добавить сервер с помощью вкладки Eclipse Servers.
  • Создайте новый проект Maven
    Позаботьтесь о том, чтобы флажок Создать простой проект (пропустить архетип) отмечен НЕ
    Выберите Archetype jboss-javaee6-webapp-blank-archetype 7.1.3.CR7

Archetype

Теперь ваш проект готов к работе:)

Ответ 4

Неясно, используете ли вы подход Eclipse WTP с Tomcat или какую-то стратегию развертывания.

Я отказался от запуска Tomcat в Eclipse из-за ненадежной повторной публикации измененных JAR. Теперь я использую Jetty через подключаемый модуль Run Jetty Run Eclipse (доступный в Eclipse Marketplace). Похоже, что он запускается из рабочей области и не использует подход, используемый для публикации в каталоге для развертывания, который Eclipse использует с Tomcat.

Вы не получаете перезагрузку динамического кода с помощью этой опции, но вы можете добавить эту функцию обратно с помощью JRebel.

Переход в левое поле, переход на язык JVM/фреймворк, который позволяет мгновенно просматривать ваши изменения без повторной публикации/перезапуска, например:

  • Воспроизвести 2 (Scala и Java)
  • Grails (Groovy)
  • Vert.X(различные языки JVM).

Ответ 5

Я предлагаю использовать sbt вместе со своим веб-плагином.

Ключевой особенностью sbt является режим непрерывной интеграции: в основном это означает, что sbt запускает команду, если файл изменяется.

Таким образом, обычные команды sbt (связанные с веб-плагином)

Контейнер: начало
Контейнер: остановка
контейнер: перезагрузка /... контейнер: перезагрузка

но используя его в режиме непрерывного интегрирования (команда, начинающаяся с ~)

~; контейнер: старт; контейнер: перезагрузка /

он автоматически перезагрузит веб-приложение, если исходный код или другие файлы изменились.

Итак, я просто сохраняю сервлеты, источники Java, Scala источники, и ударяю перезагрузку в браузере, и это действительно экономит много времени.

Это чувство Grails, но с Java в качестве основного языка программирования.

Дополнительная информация

  • У меня есть sbt работает в терминале (я не знаю, есть ли плагин для Eclipse, чтобы запустить его из Eclipse)
  • sbt может компилировать как Java, так и Scala проекты из коробки.
  • В веб-плагине используется jetty (я не знаю, возможно ли внедрить tomcat)
  • Не нужно знать Scala для настройки sbt, но вы должны прочитать учебник.
  • Это решение не привязано к IDE; поэтому он работает и без IDE (только из командной строки).

Ответ 6

Это зависит от того, пытаетесь ли вы предпринять какие-либо действия, например, нажать "Опубликовать", или если вы возражаете против копирования, даже если она прозрачна. Статический контент, такой как CSS, HTML или JavaScript, должен автоматически развертываться (т.е. Копироваться) при сохранении, если у вас есть "Автоматически публиковать при изменении ресурсов" в разделе "Публикация", выбранном в конфигурации сервера Tomcat. Вы должны обновиться в своем браузере и увидеть изменения, запретив некоторые кеширование браузера.

Если вы действительно хотите, чтобы Tomcat посмотрел прямо на ваши статические файлы проекта, запустите Tomcat без развертывания (если у вас нет Java-классов для развертывания в одном проекте) и отредактируйте файл server.xml в разделе Servers > Apache Tomcat v7.0 at localhost-config и добавьте некоторые элементы Context в Host следующим образом:

<Context docBase="C:\path\workspace\project\WebContent\css" path="/project/css" reloadable="true" />

Ответ 7

По умолчанию он разделяет только приложения, расположенные в $CATALINA_HOME/webapps. Вы можете изменить его в $CATALINA_BASE/conf/server.xml в <Host />.

Отметьте документацию для атрибута appBase.

Надеюсь, что это помогло.

Ответ 8

Используйте grizzly веб-сервер. Он полностью реализован в Java, поэтому у вас есть полная независимость от платформы и вы можете запустить его прямо из рабочего пространства, не настраивая внешние программы. Легко развертывать ресурсы статически. Вы просто должны получить javax.ws.rs.core.Application и добавить свои ресурсы, как в примере.

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

/**
 * Application class that contains resources for the RESTful web service.
 *
 */
public class MyApplication extends Application {
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(com.rest.test.SomeClass.class);
        return s;
    }
}

Это необходимо для настройки адаптера сервлета. Также можно динамически добавлять ресурсы. Но я не могу сказать вам, насколько быстро обновление ресурсов происходит с помощью динамического подхода. Во всяком случае, документация доступна в Интернете.

private static GrizzlyWebServer getServer(int port,
    String webResourcesPath, String contextPath) {
    GrizzlyWebServer gws = new GrizzlyWebServer(port, webResourcesPath);

    ServletAdapter sa = new ServletAdapter();

    /* here they are added statically */
    sa.addInitParameter("javax.ws.rs.Application", "com.rest.MyApplication");


    sa.setContextPath(contextPath);
    sa.setServletInstance(new ServletContainer());
    sa.setProperty("load-on-startup", 1);
    gws.addGrizzlyAdapter(sa, new String[] { contextPath });

    return gws;

}

Ответ 9

Обычно веб-приложения размещаются в каталоге webapps, но также можно настроить внешний каталог как каталог хоста webapplication в tomcat. Вы можете просто установить выходной каталог проекта рабочего пространства eclipse в качестве базы приложений. Это можно сделать либо с помощью приложения менеджера Tomcat для развертывания приложения из внешнего каталога, либо путем простого редактирования server.xml(который находится в каталоге conf) для определения вашего приложения, как показано ниже:

....

<Context docBase="D:\your\eclipse\workspace\project\WebContent" path="/projectbaseurl"   reloadable="true"/>

</Host>
</Engine>
</Service>
</Server>