[Java] EclipseプロジェクトをMavenへ移行した記録（書きかけ）

# あらすじ

とあるところに、Java 1.6で作られたEclipseプロジェクトがありました。
内容は、Tomcatで動くWebサイトです。
プロジェクトは担当を変えながら、秘伝のタレのごとく、綿々と運用され続けていました。
この先リプレースまで、このまま続くのだろうと思われていました。

ところがある日、突然担当者が離脱してしまいました。
困ったボスたちは、@sengoku を呼ぶことにしたのです。


# 1日目

おいら「一応git使っているのね。よかったよかった。git cloneしてーのっと」

・・・なんか妙に重いな・・・？

おいら「なんでレポジトリ内にjarやclassファイルが入ってるん！？」


# 2日目

おいら「いろいろしんどいので、Maven導入したいのですが」

なぞ「Maven？なんて読むの？」

えっ、そこから！？

相手が知らないのをいいことに、@sengoku は甘い水を語りました。

こうしてMavenを導入してもよいことになったのです。

# 3日目 - 本題

長々とした前フリへのおつきあいありがとうございました。
ここから本題です。

Maven導入にあたり、以下のことをやります。

* Mavenにあわせたディレクトリ構成へファイルを移動する
* pom.xmlを作成する
* ひたすら依存性を調べて記述する
* ついでにユニットテストを書く（今はテストが何もないのでした！）


# ファイルの移動

移行前のEclipseプロジェクトは、このようになっていました。

```
(ROOT)
 +-- WEB-INF/
 |    +-- classes/  　（コンパイル済みのclassファイル達）
 |    +-- lib/　　　　 （依存するjar達）
 |    +-- pages/      （JSPファイル達）
 |    +-- resource/    (propertiesや、外部ファイル達)
 |    +-- src/        （Javaソースファイル達）
 |    +-- web.xml
 |    +-- struts-config.xml
 |
 +-- assets/          （スタティックなファイル達）
```

移動後のディレクトリ構成は、いつものMavenスタイルです。

```
(ROOT)
 +-- web/
 |    +-- src/
 |    |    +-- main/                               (WEB-INF/src内の*.javaファイルはここ)
 |    |    |    +-- java/
 |    |    |    +-- resources/
 |    |    |    |    +-- resource/                 (WEB-INF/resouceは、resourcesの下に)
 |    |    |    +-- webapp/
 |    |    |         +-- assets/
 |    |    |         +-- WEB-INF/
 |    |    |              +-- pages/
 |    |    |              +-- web.xml
 |    |    |              +-- struts-config.xml
 |    |    |
 |    |    +-- test/
 |    |
 |    +-- pom.xml
 |
 +-- libs/            （Mavenレポジトリに存在しないJar達）
 +-- pom.xml
```

移動元と移動先をまとめると、このようになります。

| 移動元 | 移動先 |
|:--|:--|
| `WEB-INF/src/**/*.java`  | `web/src/main/java/`  |
| `WEB-INF/resource` | `web/src/main/resources/resource` |
| `WEB-INF/pages`  | `web/src/main/webapp/WEB-INF/pages`  |
| `WEB-INF/web.xml`   | `web/src/main/webapp/WEB-INF/web.xml`  |
| `WEB-INF/struts-config.xml`  | `web/src/main/webapp/WEB-INF/struts-config.xml`  |
| `assets` | `web/src/main/webapp/assets` |



自分なりの工夫としては、親子プロジェクトにして、既存のものを子プロジェクトにしたことです。
今後、DBマイグレーションや統合テスト等の子プロジェクトを追加していきたいと思っています。


# pom.xmlの作成

前述のとおり、親子プロジェクトにしました。既存のものは子プロジェクトにしました。

## 親pom.xml

```xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>com.example</groupId>
	<artifactId>maxxdd</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<packaging>pom</packaging>

	<name>Maxx parent project</name>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.6</maven.compiler.source>
		<maven.compiler.target>1.6</maven.compiler.target>
		<struts.version>1.3.10</struts.version>
	</properties>

	<modules>
		<module>web</module>
	</modules>

	<build>
		<pluginManagement>
<!-- snip -->
		</pluginManagement>
	</build>
</project>
```


# おいら「次は子pom.xmlを……」

なぞ「sengokuくんなにしてるの？」

おいら「後から来る人のためのメモ的な記録を……」

なぞ「……」

おいら「……」

# 記事はここまで

中途半端でごめんなさい。

移行自体はできましたよん。次はJenkinsを導入したいところです。