スポンサーリンク
前回は既存の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」というファイルが現状どのように動作し、どこに修正が必要かを確認し、修正方針を立てます。
スポンサーリンク
スポンサーリンク