Как я могу ускорить Maven и Netbeans - PullRequest
7 голосов
/ 19 сентября 2011

У меня довольно большой проект (с довольно большим стеком, включая Spring и Hibernate), который я собираю через Netbeans с помощью Maven.

К сожалению, каждый раз, когда я делаю изменения в классе, мне нужно перестраивать. Это значит

  • Сохранить все и скомпилировать
  • Запустить все тесты
  • Создайте грандиозную войну
  • Удалить из Tomcat
  • Передислокация из Tomcat
  • Запустить приложение (Spring = Zzzzzzz / Hibernate = Zzzzzzz)

Это может занять до 5 минут, чтобы проверить, если небольшие изменения имели значение. Возможно, у меня неправильный подход?

Пожалуйста, сообщите ...

Ответы [ 3 ]

6 голосов
/ 20 сентября 2011

Хорошо, я также работаю над довольно похожей настройкой, так что вот мои 2 цента.

Прежде всего, намочите ноги с Maven-Jetty Plugin.Сделайте так, чтобы он сканировал файлы на наличие изменений, чтобы вам не приходилось перестраивать / развертывать весь проект для каждого изменения.Также настройте его так, чтобы он сохранял сессию, чтобы при каждом (автоматическом) развертывании вам не приходилось повторно регистрироваться и переходить в состояние, в котором вы находились до внесения изменений:

    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.24</version> 
        <configuration>
            <stopPort>9669</stopPort>
            <stopKey>myapp</stopKey>
            <!-- Redeploy every x seconds if changes are detected, 0 for no automatic redeployment -->
            <scanIntervalSeconds>3</scanIntervalSeconds>
            <connectors>
                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                    <port>8080</port>
                    <maxIdleTime>60000</maxIdleTime>
                </connector>
            </connectors>
            <webAppConfig>
                <contextPath>/myapp</contextPath>
                <sessionHandler implementation="org.mortbay.jetty.servlet.SessionHandler">
                    <sessionManager implementation="org.mortbay.jetty.servlet.HashSessionManager">
                        <storeDirectory>${project.build.directory}/sessions</storeDirectory>
                    </sessionManager>
                </sessionHandler>
            </webAppConfig>
        </configuration>
    </plugin>

Теперь перейдите к проекту Properties(щелкнув правой кнопкой мыши по проекту)> Build> Compile> Compile on save и выберите For both application and text execution.

Также перейдите на Options> Miscellaneous> Maven> и проверьте / выберите Skip Tests for any build executions not directly related to testing, чтобы тест выполнялся только тогда, когда вы действительно запускаете «Тест».

Следуя этим простым шагам, я могу кодировать и тестировать изменения в реальном времени, быстро и без необходимости повторного развертывания.Тем не менее, я столкнулся с несколькими незначительными проблемами / неприятностями:

  1. Вам все еще приходится чистить сборку иногда, когда что-то не работает (например, вы что-то удалили, а изменения неотражать)

  2. Поддержание его в течение длительного времени может дать исключение PermGen (Недостаточно места), что является разумным, и вы всегда можете увеличить объем памяти, используя опции jvm

  3. вам не понравится разрабатывать / тестировать проекты для таких контейнеров, как jboss / websphere, как только вы привыкнете к этой настройке

2 голосов
/ 27 августа 2013

Дайте JRebel попробовать.http://www.zeroturnaround.com/jrebel/

Кстати, мне не платит zt - только довольный пользователь.

1 голос
/ 19 сентября 2011

Зачем вам нужно запускать тесты для каждого изменения? Это огромные затраты при внесении тривиальных изменений. Выключите его, используя -DskipTests = true

Взгляните на: http://wiki.netbeans.org/HotDeploymentWebApplicationWithMaven

Кроме того, настройте Netbeans для горячего развертывания на Tomcat (используйте Jetty). См. Этот пост: Инкрементное горячее развертывание в Tomcat с Maven и NetBeans .

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