Liferay(Portal)を最新ソースコードからビルドして構築する手順

## はじめに
Liferay(Portal)構築する際、一般的には本家サイトから安定板コンパイル済みコードとアプリサーバを含むBundleをダウンロードし、その中に含まれる起動ファイルを実行するといった簡単な手順で構築します。
（[Liferayダウンロードサイト](https://www.liferay.com/ja/downloads)）

本手順は上記とは異なりLiferay開発や調査用にGitHub最新コードから構築する手順を記載します。（Windowsでの構築で記載してますがLinuxでも構築できます）
また、LiferayIDE(Eclipse)を使用してビルド実行できますが、ビルド時のファイルやディレクトリ削除処理等において、未使用なのにLiferayIDEが勝手にファイルを握ったりするため、ビルドが失敗することが多々あります。そのためLiferayIDEを使用せずに、コマンドプロンプトでビルド実行する手順を記載します。

## 構築するフォルダ構成
下記構成で手順を記載します。

C:\Liferay（Liferay構築用ルートフォルダ）
　　　├ liferay_src（Liferayソースコードフォルダ）
　　　└ bundles（アプリサーバBundleルートフォルダ）

## 事前準備
下記ツールをインストールしておく必要があります。
インストール方法については省略します。

**Java最新版(JDK)インストール**
PATH、JAVA_HOMEを設定しておくこと
（2016/8時点ではJava1.8以降でなければコンパイルできない）
**Antインストール**
ANT_HOMEを設定しておくこと
**Gitインストール**

## プロキシ設定
もし構築するPCがプロキシを介している場合はプロキシの設定が必要です。ツールによってプロキシ情報を参照する場所が異なるため複数個所設定が必要です。プロキシを介してない場合は読み飛ばしてください。

**1. Gitのプロキシ設定**
下記を参照してください。
[サルでもわかるGit入門（プロキシサーバを経由してhttp接続したい）](http://www.backlog.jp/git-guide/reference/config.html#sec7)

**2. npmのプロキシ設定**
npmはAntビルド内で使われています。
OSの環境変数に下記のように設定してください。

* HTTP_PROXY=http://<プロキシサーバ名>:<ポート番号>
* HTTPS_PROXY=http://<プロキシサーバ名>:<ポート番号>

**3. Ant/Apache-ivyのプロキシ設定**
以降のビルド手順参照。

**4. Gradlewのプロキシ設定**
以降のビルド手順参照。

**5. アプリサーバ起動時のプロキシ設定**
以降のビルド手順参照。

## ソースコード取得
GitHubからソースコードを取得してC:\Liferay\liferay_srcへ展開します。
ソースコードは下記GitHubから取得できます。
https://github.com/liferay/liferay-portal

ZIPファイルをダウンロードし展開、もしくはGitクローンで取得します。
ここではGitクローンで取得する場合を記載しておきます。

```bat:コマンドプロンプト
cd C:\Liferay\
git clone https://github.com/liferay/liferay-portal.git --depth 1 liferay_src
```

※Gitクローンする場合、ダウンロードに時間がかかってしまうため「--depth 1」を付けて余計な情報を持ってこないようにしましょう。ちなみに「--depth 1」を付けてもダウンロードにウン時間かかります。時間をかけたくない場合はZIPファイルを展開した方がよいでしょう。

## 設定ファイル変更

**1. アプリサーバBundleルートフォルダ設定変更**
取得したソースフォルダ直下に「app.server.properties」があります。このプロパティで設定されている項目を変更（上書き）するためにはファイルを直接変更することは許されておらず、「app.server.＜実行するOSのユーザ名＞.properties」を同階層に新規作成して設定を書きます。
アプリサーバBundleルートフォルダ設定変更する場合、

```app.server.properties
app.server.parent.dir=${project.dir}/../bundles
```

上記のようにデフォルトで設定しているため、今回構築する構成では変更の必要がないですが、変更する場合は下記のように設定してください。

```app.server.＜実行するOSのユーザ名＞.properties
app.server.parent.dir=＜アプリサーバBundleルートフォルダを生成したい場所＞
```

*※＜実行するOSのユーザ名＞は下記コマンドで確認できます。*
*`echo %username%`*


**2. ant/apache-ivyのプロキシ設定**
プロキシを介してない場合は読み飛ばしてください。
取得したソースフォルダ直下に「build.properties」があります。このプロパティも設定されている項目を変更（上書き）するためにはファイルを直接変更することは許されておらず、「build.＜実行するOSのユーザ名＞.properties」を同階層に新規作成して設定を書きます。

```build.＜実行するOSのユーザ名＞.properties
setproxy.proxy.host=<プロキシサーバ名>
setproxy.proxy.port=<ポート番号>
```

**3. Gradlewのプロキシ設定**
プロキシを介してない場合は読み飛ばしてください。
Gradlewでプロキシを使用する場合は環境変数JAVA_OPTSの設定が必要となります。「build-common.xml」を直接修正します。ファイル内で「GRADLE_OPTS」を検索しその直下に「JAVA_OPTS」の設定を追記します。

```build-common.xml
     :
<exec dir="@{dir}" executable="${project.dir}/gradlew${gradlew.suffix}" failonerror="@{failonerror}">
	<args />
	<arg value="--no-daemon" />
	<arg value="--project-cache-dir=${project.dir}/.gradle" />
	<arg value="--stacktrace" />
	<arg value="-Dapp.server.parent.dir=${app.server.parent.dir}" />
	<arg value="-Dforced.cache.enabled=@{forcedcacheenabled}" />
	<arg value="-Dliferay.home=${liferay.home}" />
	<arg value="@{task}" />
	<env key="GRADLE_OPTS" value="${env.ANT_OPTS}" />
	<!-- ここから追記 -->
	<env key="JAVA_OPTS" value="-DproxyHost=${setproxy.proxy.host} -DproxyPort=${setproxy.proxy.port}" />
	<!-- ここまで追記 -->
</exec>
     :
```

## アプリサーバBundle生成
アプリサーバBundleの生成を行います。ソースコードフォルダ配下でビルドファイルを指定してAntコマンドを実行します。Ant実行の前に「ANT_OPTS=-Xmx2048m -XX:MaxPermSize=512m」の設定が必要となります。またプロキシを介している場合は「setporxy」タスクの指定も必要です。ここではTomcatのアプリサーバBundleタスクを指定して実行しています。他のアプリサーバを使用したい場合は対象のアプリサーバBundleタスクを指定してください。

* 通常

```bat:コマンドプロンプト
cd C:\Liferay\liferay_src
set ANT_OPTS=-Xmx2048m -XX:MaxPermSize=512m
ant -f build-dist.xml unzip-tomcat
```

* プロキシを介している場合

```bat:コマンドプロンプト
cd C:\Liferay\liferay_src
set ANT_OPTS=-Xmx2048m -XX:MaxPermSize=512m
ant -f build-dist.xml setproxy unzip-tomcat
```

## ビルド＆デプロイ
ソースコードのビルドおよびデプロイをを行います。ソースコードフォルダ配下でビルドファイルを指定してAntコマンドを実行します。プロキシを介している場合は「setporxy」タスクの指定も必要です。アプリサーバBundle生成時と同じコマンドプロンプト使っている場合は「ANT_OPTS」の指定は既に設定しているので実行する必要ないですが、ここでは一応実行しています。ビルドには30分程度時間がかかります。

* 通常

```bat:コマンドプロンプト
cd C:\Liferay\liferay_src
set ANT_OPTS=-Xmx2048m -XX:MaxPermSize=512m
ant all
```

* プロキシを介している場合

```bat:コマンドプロンプト
cd C:\Liferay\liferay_src
set ANT_OPTS=-Xmx2048m -XX:MaxPermSize=512m
ant setproxy all
```

ビルドが正常完了するとアプリサーバBundleフォルダ配下の「deploy」フォルダ(C:\Liferay\bundles\deploy)にwarファイルが生成されているので確認してみてください。

## アプリサーバ起動
プロキシを介している場合は起動ファイルcatalina.batの処理開始行setlocal直後にプロキシの設定を追記します。

```bat:catalina.bat
 :
rem ---------------------------------------------------------------------------

setlocal

set JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=<プロキシサーバ名> -Dhttp.proxyPort=<ポート番号> -Dhttps.proxyHost=<プロキシサーバ名> -Dhttps.proxyPort=<ポート番号>
 :
```

Tomcatを起動します。起動に数分かかります。

```bat:コマンドプロンプト
cd C:\Liferay\bundles\tomcat-8.0.32\bin
.\catalina.bat run
```
*※tomcat-8.0.32は環境によって読み替えてください。*
*※Tomcatを起動した際、上記で作成したwarファイルは取り込まれて「deploy」フォルダから消えます。*


## アプリサーバ起動確認
Liferayの初期設定画面が表示されていれば成功です。
http://localhost:8080

![liferay_start.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/0ac692f7-6197-357b-fdb4-8cb6b34817a5.jpeg)



以上。