8

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

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

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

我想做的是:

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

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

我也尝试过像这样配置 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

4 回答 4

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>
于 2011-05-18T14:47:35.357 回答
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"
于 2011-05-17T20:20:14.563 回答
0

经过一番研究,问题不在于码头插件,而在于 maven-compiler-plugin。增量编译中有一个错误。请参阅此 stackoverflow 问题和答案:Maven 编译器插件总是将一组源检测为“陈旧”

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

<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>
于 2013-12-11T08:00:57.277 回答
-1

如果你说这些类已经被 Eclipse 编译过,那么重新编译可能有两个原因:

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

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

于 2011-05-05T14:39:29.847 回答