【问题标题】:When using maven jetty:run - is it possible to disable the compilation step?使用 maven jetty:run 时 - 是否可以禁用编译步骤?
【发布时间】:2013-12-11 16:00:57
【问题描述】:

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

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

我正在使用配置文件,并在我的“开发”配置文件下运行 mvn jetty:run。

我想做的是:

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

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

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

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

发展 maven 编译器插件 默认测试编译 测试编译 默认编译 编译 1.6 1.6 错误的 org.mortbay.jetty 码头Maven插件 7.2.2.v20101205 真的 发展

更新:

我将尝试专门禁用 scala 编译

【问题讨论】:

  • 据我所知,您可以将码头插件配置为定期扫描,因此您无需停止码头...并在 Eclipse 中进行更改...深入了解 maven-码头插件..
  • khmarbaise,我已经禁用了扫描,因为我正在使用 jrebel 进行编译。我还对插件进行了深入研究,否则我不会在这里。它需要的是禁用 jetty:run 目标的 fork 编译阶段

标签: maven maven-jetty-plugin jrebel


【解决方案1】:

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

    解决办法是设置一个环境变量:

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

    以上对我有用。

    在 Internet 的其他地方,它被描述为:

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

    【讨论】:

    • 虽然这看起来可行,但实际上并没有。回到绘图板。
    • 另一部分用于远程调试器连接
    【解决方案3】:

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

    以下配置对我很有效;它允许在代码发生更改且重新编译最少的情况下快速重启码头,如果您已经编译,它不会重新编译:

    <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>
    

    【讨论】:

      【解决方案4】:

      如果说类已经被Eclipse编译过,那么重新编译的可能原因有两种:

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

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

      【讨论】:

      • 不,这不是原因。原因是 jetty:run 目标在每次启动时都会进行编译。我已经解决了这个问题,现在将发布解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多