8

私はEclipseとMavenを使用しており、Mavenjettyプラグインを使用してアプリケーションを実行しています。

jetty:runを実行するたびに、Mavenがファイルの再コンパイルを要求するのは少しイライラします。ファイルはすでにEclipseによってコンパイルされているため、これは最適ではありません(そして、私は(比較的)遅いコンパイラーを備えたScalaを書いています)。

プロファイルを使用しており、「開発」プロファイルでmvn jetty:runを実行しています。

私がやりたいことは:

開発プロファイルで実行中にコンパイルフェーズをスキップするようにjettyプラグインを構成します。

Mavenライフサイクルのドキュメントを調べましたが、「skip.compile」フラグまたは構成パラメーターに関する情報が見つかりませんでした。

また、maven-jetty-pluginの起動時に再コンパイルが停止するという無駄な仮定で、Mavenをそのように構成しようとしました。

私は間違っていました、それはうまくいきませんでした。しかし、私が考えたのは、おそらくScalaコンパイラが問題だということです。おそらくそれはコンパイルのものを無視します。

開発maven-compiler-plugindefault-testCompiletest-compile default-compile compile 1.6 1.6 false org.mortbay.jetty jetty-maven-plugin7.2.2.v20101205true開発

アップデート:

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

いくつかの調査の結果、問題は jetty プラグインではなく、maven-compiler-plugin にあります。incrementalCompilation にバグがあります。このstackoverflowの質問と回答を参照してください: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>
于 2013-12-11T08:00:57.277 に答える
-1

クラスがすでに Eclipse によってコンパイルされていると言う場合、再コンパイルの原因として次の 2 つが考えられます。

  • コンパイルされたクラスを何らかの方法で呼び出しcleanまたは削除しています。
  • Eclipse の出力フォルダーは、Maven の出力フォルダーと同じではありません。

そのため、コンパイル済みのクラスが削除されないようにするか、Eclipse と Maven が同じ出力フォルダーを使用するように構成する必要があります。

于 2011-05-05T14:39:29.847 に答える