Eclipse WTPとmavenのeclipseプラグインでwarningが出る件の対処

えー、blogのタイトルにあるとおり、「Eclipse WTPmaveneclipseプラグインでwarningが出る件の対処」というマニアックな件についてw。

Eclipseのwarningに、
Classpath entry M2_REPO/hoge.jar will not be exported or published. Runtime ClassNotFoundExceptions may result. 」
とかいうのが出てて、ずっと消えなかった。

ググってもろくな情報でなかったんだけど、海外のサイトを見て、warningの上でCtrl+1でQuick Fixしろと書いてあったのでやってみた。
結果として classpath

<classpathentry kind="var" path="M2_REPO/hoge.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>

が、

 <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar">
  <attributes>
   <attribute name="org.eclipse.jst.component.dependency" value="../"/>
  </attributes>
 </classpathentry>

に変わることによってwarningが消えていた。


一番美しい策は、maven-eclipse-pluginの.classpathの出力の後に自分で作ったプラグインなどで、.classpathを書き換えられるのが一番なんだろうけど、その方法もよくわからなかったので、直接 Eclipseプラグインをいじりました。

今のプロジェクトだとなぜか最新じゃない maven-eclipse-plugin の 2.4 使ってるので、subversion

  svn checkout https://svn.apache.org/repos/asf/maven/plugins/tags/maven-eclipse-plugin-2.4 maven-eclipse-plugin

とかでソースダウンロードして、org.apache.maven.plugin.eclipse.writers.EclipseClasspathWriter の addDependency メソッドの中で、

        writer.startElement( "attributes" ); //$NON-NLS-1$
        writer.startElement( "attribute" ); //$NON-NLS-1$
        writer.addAttribute( "value", "../" ); //$NON-NLS-1$ //$NON-NLS-2$
        writer.addAttribute( "name", "org.eclipse.jst.component.dependency" ); //$NON-NLS-1$ //$NON-NLS-2$
        writer.endElement();
        writer.endElement();

とかして、attrbutes を無理やりくっつけるように書き換えて、
maven-eclipse-pluginで、mvn install してやってeclipseプラグインを置き換えてから、
mvn eclipse:eclipse するようにしまんた。