使用maven jetty时:运行 - 是否可以禁用编译步骤?

时间:2011-05-05 11:25:14

标签: maven maven-jetty-plugin jrebel

我正在使用Eclipse和Maven并使用Maven jetty插件运行我的应用程序。

我发现Maven每次执行jetty时都坚持要重新编译我的文件,这有点令人恼火:run。它是次优的,因为文件已经由Eclipse编译(我正在编写Scala,它有一个(相对)慢的编译器。)

我正在使用配置文件,并运行mvn jetty:在我的'development'配置文件下运行。

我想做的是:

  
    
      

配置jetty插件,以便在开发配置文件下运行时跳过编译阶段。

    
  

我查看了maven生命周期文档,但没有找到有关'skip.compile'标志或配置参数的任何信息。

我也尝试过像这样配置Maven徒劳地假设它会在maven-jetty-plugin启动时停止重新编译。

我错了,它没用。但我所想的是,也许Scala编译器就是问题所在。也许它忽略了编译的东西。

       发展                                                                 Maven的编译器插件                                       默认testCompile               测试编译                                                                                        默认编译               编                                                                                               1.6             1.6             假                                        org.mortbay.jetty           码头 - Maven的插件           7.2.2.v20101205                                                                   真正                    发展                     

更新

我将尝试专门禁用scala编译

4 个答案:

答案 0 :(得分:9)

终于解决了.. @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>

答案 1 :(得分:2)

解决方案是设置一个环境变量:

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

以上对我有用。

在互联网的其他地方,它被描述为:

MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y"

答案 2 :(得分:0)

经过一番研究,问题不在于jetty插件,而在于maven-compiler-plugin。 incrementalCompilation中有一个错误。请参阅此stackoverflow问题和答案:Maven compiler plugin always detecting a set of sources as "stale"

以下配置适合我;它允许在代码更改时以最小的重新编译快速重启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>

答案 3 :(得分:-1)

如果您说这些类已经由Eclipse编译,则有两种可能的原因需要重新编译:

  • 您正在调用clean或以某种方式删除已编译的类;
  • Eclipse的输出文件夹与Maven的输出文件夹不同。

因此,您需要阻止删除已编译的类,或者将Eclipse和Maven配置为使用相同的输出文件夹。