Eclipse WTPとmavenのeclipseプラグインでwarningが出る件の対処
えー、blogのタイトルにあるとおり、「Eclipse WTPとmavenのeclipseプラグインで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 するようにしまんた。