При использовании maven jetty: run - возможно ли отключить этап компиляции? - PullRequest
8 голосов
/ 05 мая 2011

Я работаю с Eclipse и Maven и запускаю свое приложение с помощью подключаемого модуля Maven jetty.

Меня слегка раздражает, что Maven настаивает на перекомпиляции моих файлов каждый раз, когда я выполняю jetty: run.Это неоптимально, так как файлы уже были скомпилированы Eclipse (и я пишу Scala, который имеет (относительно) медленный компилятор).

Я использую профили и запускаю mvn jetty: runпод моим профилем 'development'.

Что я хочу сделать, это:

Сконфигурируйте подключаемый модуль Jetty так, чтобы он пропускал фазу компиляции во время работы подПрофиль развития.

Я изучил документацию по жизненному циклу maven, но не нашел никакой информации о флаге или параметре конфигурации skip.compile.

I 'Мы также пытались настроить Maven таким образом, напрасно предполагая, что он остановит перекомпиляцию при запуске maven-jetty-plugin.

Я ошибся, это не сработало.Но я подумал, что, возможно, проблема в компиляторе Scala.Возможно, он игнорирует материал компиляции.

development maven-compiler-plugin default-testCompile test-compile default-compile compile 1.6 1.6 false org.mortbay.jetty jetty-maven-plugin 7.2.2.v20101205 true development

Обновление:

Я собираюсь попробовать отключить компиляцию scala

Ответы [ 4 ]

9 голосов
/ 18 мая 2011

Наконец-то решено .. @ RobertMunteanu

Ух ты!Что ж, я наконец понял, что я делаю неправильно, решение состоит в том, чтобы создать профиль разработки и производства, а для профиля разработки сконфигурировать выполнение плагина Scala, чтобы он ничего не делал.

Вот так:

<profile>
  <id>development</id>
  <build>
    <plugins>
      <plugin>
        <groupId>org.scala-tools</groupId>
        <artifactId>maven-scala-plugin</artifactId>
        <executions>
          <execution>
            <id>compile</id>
            <goals></goals>
            <phase>compile</phase>
          </execution>
          <execution>
            <id>test-compile</id>
            <goals></goals>
            <phase>test-compile</phase>
          </execution>
          <execution>
            <id>default-testCompile</id>
            <phase>test-compile</phase>
            <goals></goals>
          </execution>
          <execution>
            <id>default-compile</id>
            <phase>compile</phase>
            <goals></goals>
          </execution>
          <execution>
            <phase>process-resources</phase>
            <goals>
            </goals>
          </execution>
        </executions>
      </plugin>
2 голосов
/ 18 мая 2011

Решение состоит в том, чтобы установить переменную среды:

MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE"

Вышесказанное сработало для меня.

В другом месте в Интернете это описывается как:

MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y"
0 голосов
/ 11 декабря 2013

После некоторых исследований проблема связана не с плагином Jetty, а с плагином maven-compiler-plugin.В инкрементальной компиляции есть ошибка.См. Этот вопрос и ответ на стек-поток: Плагин компилятора Maven всегда определяет набор источников как "устаревший"

Следующая конфигурация хорошо работает для меня;он позволяет очень быстро перезапустить Jetty, когда код изменился с минимальной перекомпиляцией, и не перекомпилируется, если вы уже скомпилировали:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
        <debug>${compile.debug}</debug>
        <useIncrementalCompilation>false</useIncrementalCompilation>
            </configuration>
</plugin>
  <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <version>6.1.26</version>       
              <configuration>
                <contextPath>/</contextPath>                     
                <webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory>
                <scanIntervalSeconds>2</scanIntervalSeconds>
                <scanTargets>
                    <scanTarget>src/main/java</scanTarget>
                </scanTargets>                       
            </configuration>             
</plugin>
0 голосов
/ 05 мая 2011

Если вы говорите, что классы уже скомпилированы Eclipse, есть две возможные причины перекомпиляции:

  • вы вызываете clean или удаляете скомпилированные классы каким-либо образом;
  • папка вывода для Eclipse не совпадает с папкой вывода для Maven.

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

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