tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

mvn eclipse:eclipseとmvn eclipse:m2eclipseの違い

追記:
maven-eclipse-pluginのバージョン2.8以降はeclipse:m2eclipseゴールが無くなったようです。
eclipse:eclipseゴールで生成された.projectファイルに以下の記述が増えていました。

  <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>

だそうなので、eclipse:m2eclipseを使いたい場合は2.7にする必要があります。

mvn eclipse:eclipse

と、

mvn eclipse:m2eclipse

で、生成されるファイルの中身を比べてみた。

結論としては、m2eclipseプラグインを使用している場合は、mvn eclipse:m2eclipseを使用した方がいい。

.projectファイル

mvn eclipse:eclipse
<projectDescription>
  <name>myproject</name>
  <comment></comment>
  <projects/>
  <buildSpec>
    <buildCommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
  </natures>
</projectDescription>
mvn eclipse:m2eclipse
<projectDescription>
  <name>myproject</name>
  <comment></comment>
  <projects/>
  <buildSpec>
    <buildCommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
    </buildCommand>
    <buildCommand>
      <name>org.maven.ide.eclipse.maven2Builder</name>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.maven.ide.eclipse.maven2Nature</nature>
  </natures>
</projectDescription>

eclipse:m2eclipseでは、m2eclipse用のbuildCommandとnatureが足される。

.classpathファイル

mvn eclipse:eclipse
<classpath>
  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
  <classpathentry kind="src" path="src/main/java"/>
  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
  <classpathentry kind="output" path="target/classes"/>
  <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty/6.1.4/jetty-6.1.4.jar" sourcepath="M2_REPO/org/mortbay/jetty/jetty/6.1.4/jetty-6.1.4-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-management/6.1.4/jetty-management-6.1.4.jar" sourcepath="M2_REPO/org/mortbay/jetty/jetty-management/6.1.4/jetty-management-6.1.4-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-util/6.1.4/jetty-util-6.1.4.jar" sourcepath="M2_REPO/org/mortbay/jetty/jetty-util/6.1.4/jetty-util-6.1.4-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.2/junit-3.8.2.jar" sourcepath="M2_REPO/junit/junit/3.8.2/junit-3.8.2-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/mx4j/mx4j/3.0.1/mx4j-3.0.1.jar" sourcepath="M2_REPO/mx4j/mx4j/3.0.1/mx4j-3.0.1-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/mx4j/mx4j-tools/3.0.1/mx4j-tools-3.0.1.jar" sourcepath="M2_REPO/mx4j/mx4j-tools/3.0.1/mx4j-tools-3.0.1-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/servlet-api-2.5/6.1.4/servlet-api-2.5-6.1.4.jar" sourcepath="M2_REPO/org/mortbay/jetty/servlet-api-2.5/6.1.4/servlet-api-2.5-6.1.4-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2-sources.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/apache/wicket/wicket/1.4-rc4/wicket-1.4-rc4.jar" sourcepath="M2_REPO/org/apache/wicket/wicket/1.4-rc4/wicket-1.4-rc4-sources.jar"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>
mvn eclipse:m2eclipse
<classpath>
  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
  <classpathentry kind="src" path="src/main/java"/>
  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
  <classpathentry kind="output" path="target/classes"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
  <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
</classpath>

eclipse:eclipseだと個々のライブラリの記述があるため、依存ライブラリを変更した場合には再度mvnコマンドを実行する必要がある。
一方、eclipse:m2eclipseの場合は、依存ライブラリを動的に読み込むため.classpathには記載されない。