情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

Eclipseの既存プロジェクトをMavenプロジェクトに変換する(2):変更されたファイルと新規作成されたファイル

Eclipse (60) Maven (19)

前回は既存のEclipseプロジェクトをMavenプラグインを利用してMavenプロジェクトに変換しました。

今回は、その変換の影響で変更されたファイルと、新規作成されたファイルを分析しておきます。

Maven化によるファイルの変更

前回実行したウィザードで何が起こったのかを「Git Staging View」のファイルの変更監視機能を頼りにチェックしておきました。

変更があったファイル一覧

  • /.classpath(変更)
  • /.project(変更)
  • /.settings/org.eclipse.m2e.core.prefs(新規作成)
  • /pom.xml(新規作成)

一つ一つチェックしておきます。

/.classpath(変更)

変更を確認する際は、「Navigator view」で対象ファイル(.classpath)を右クリックして、「Compare with>HEAD Revision(など)」を選択することで、変更前と変更後の間のDiff(変更の差分)を見ることができます。

Before

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="test"/>
	<classpathentry kind="lib" path="lib/ws-commons-util-1.0.2.jar"/>
	<classpathentry kind="lib" path="lib/xmlrpc-client-3.1.3.jar"/>
	<classpathentry kind="lib" path="lib/xmlrpc-common-3.1.3.jar"/>
	<classpathentry kind="lib" path="lib/xmlrpc-server-3.1.3.jar"/>
	<classpathentry kind="lib" path="lib/commons-cli-1.2.jar"/>
	<classpathentry kind="lib" path="lib/clink200.jar"/>
	<classpathentry kind="lib" path="lib/servlet-api-3.0.jar"/>
	<classpathentry kind="lib" path="lib/je-5.0.58.jar"/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
	<classpathentry kind="output" path="build"/>
</classpath>

After

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
	<classpathentry kind="output" path="target/classes"/>
</classpath>

ここからわかるのは、.classpathにあった「classpathentry」がごっそりと削除され、「org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER」に集約されている点と、「output」が「build」から「target/classes」に変更されている点です。

「.classpath」がそもそも何なのかをEclipseから理解するために、プロジェクトのプロパティにある「Java Build Path」を見てみます。

変更点「Defult output folder」=「classpathentry kind="output"」

すると、「Default output folder」が「project-name/build」から「project-name/target/classes」に変わっており、「classpathentry kind="output"」と対応していることが分かります。ここが書き換えられました。

実はこの「target/classes」は、Maven2のデフォルトの出力先となっています(参考:Maven2のデフォルトのディレクトリ構成。この点については、ディレクトリ構造を強制的に変更されるようです。

変更点「org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER」=「Maven Dependencies」

続いて、同じプロジェクトのプロパティの「Java Build Path」にある「Libraries」タブを見てみます。すると、ここに登録されていたライブラリがごっそり削除され、「Maven Dependencies」というものが追加されていることが分かります。これが「classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"」が追加された結果、というわけです。

つまり、たくさんあった依存関係が集約されたというわけです。ちゃんと調べていませんが、この「kind="con"」は、「Container(コンテナ)」の略だと思われます。

変わらなかったところ「org.eclipse.jdt.launching.JRE_CONTAINER/...」

したがって、.classpathのclasspathentryの中で唯一変わらなかった行である「org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5」は、「Libraries」タブにある「JRE System Library [J2SE-1.5]」に対応していたということがわかります。こうやって見比べてみると、.classpathが何を指定しているのかがよく分かりますね。

/.project(変更)

次に、「.project」の変更をチェックしてみます。同様にDiffをチェックします。

Before

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>project-name</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription>

After

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>project-name</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.m2e.core.maven2Builder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.m2e.core.maven2Nature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription>

変更点「org.eclipse.m2e.core.maven2Builder」の追加

まず分かることは、「buildCommand」として「org.eclipse.m2e.core.maven2Builder」が追加されていることです。

これもEclipseからチェックしてみると、プロジェクトのプロパティにある「Builders」に対して「Maven Project Builder」が追加されていることがわかります。

変更点「org.eclipse.m2e.core.maven2Nature」の追加

また、「nature」として「org.eclipse.m2e.core.maven2Nature」が追加されていることが分かります。

変更点「改行コード」が変わっている

実は、このBefore/Afterでは分からないのですが、Diff上では全行変更されたことになっていました。実は、改行コードが書き換えられていたのです

Mavenプロジェクトへの変換前の改行コードは「LFのみ」だったのに対して、変換後は「CR+LF」になっています(Eclipse上では、LFが旗のような改行マーク、CRが×の上に小さな○を重ねたようなマークとして表示されます)

もともと私はWindows上で利用しているEclipseの文字コード・改行文字のデフォルトを「UTF-8」と「Unix(LFのみ)」にしていたため、Mavenが間違えて.projectの改行コードをWindows標準である「CR+LF」に変更して書き換えてしまったものと推定されます。

このままでもよいのですが、ソースコードを管理するときに若干不便なので、.projectの改行コードをLFのみに戻しておきました(古いけど参考

.project(XMLファイル)の改行コードの変更方法

これについては別エントリに書きます。

/.settings/org.eclipse.m2e.core.prefs(新規作成)

続いて、新しく作成された「org.eclipse.m2e.core.prefs」の中身を確認しておきます。

activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

これは、プロジェクトのプロパティの「Maven」と対応しており、1行目が「Active Maven Profiles」が空欄であること、3行目が「Resolve dependencies from Workspace projects」が「ON」であることを表しています。

ちなみに、.settings以下のファイルは、改行文字が「CR+LF」になっていました(org.eclipse.jdt.core.prefsを含めて)。

/pom.xml(新規)

最後に、一番今後目にすることが多くなる「pom.xml」を見ていきます。

新規作成直後、中身は次のようになっていました(通常Maven Pom Editorで開かれますが、右クリックからOpen With>Text Editorで開くと、通常のエディタで中身を直接見ることが可能です)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>project-name</groupId>
  <artifactId>project-name</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

見て分かるとおり、「project」タグの中に、さきほど入力した「group id」「artifact id」「version」がそのまま入力されているだけで、余計な設定は一切見受けられません。

したがって、ここからプロジェクトの環境に合わせてpom.xmlを、調べながら(ちょっとした修正ではなく)編集していく必要があるようです。

まとめ

以上で何が変わったかを良く理解することができました。

とりあえずこれで、Mavenの設定に注力できそうです。

次回は、その設定の核となる「pom.xml」というファイルが現状どのように動作し、どこに修正が必要かを確認し、修正方針を立てます。

コメント(0)

新しいコメントを投稿