iDempiere v2.0の開発環境をMacに構築する


## iDempiere(アイデンピエレ)とは

> iDempiereは、オープンソースのERPパッケージ（統合業務パッケージ）ソフトウェアです。
受注から出荷までの一連のサプライチェーンマネージメント(SCM)と管理会計、財務会計人事管理を含めた企業の基幹業務、顧客管理機能(CRM)などもサポートします。

> iDempiereは、販売管理、購買管理、在庫管理、生産管理、固定資産管理、人事給与管理、財務会計といった基幹業務機能を提供しているだけでなく、それらの機能や情報を相互に連携することで、業務の効率化、見える化も推進できるソフトウェアであり、世界で最も高機能なオープンソースERPのひとつとして近年注目が集まっています。

from [OpenStandia iDempiereの概要](http://openstandia.jp/oss_info/idempiere/)

## 使用するもの

* Mac OS X 10.8
* Eclipse Juno

## 前提

* PostgreSQL 9.2がインストールされ、接続可能な状態であること。


## 準備

### Eclipse Buckminster プラグインの導入

BuckminsterとはEclipse Plug-inのビルドやテストを補助するEclipseプラグインです。プラグインのためのプラグイン!

Eclipseメニュー: Help > Install New Software からInstallダイアログを表示して、アップデートサイト(Work with:)に、 http://download.eclipse.org/tools/buckminster/updates-4.2 を指定し、"core", "maven", "pde" の3つのパッケージを選択してインストールします。

### iDempiereのソースツリーをクローンする

hg clone https://bitbucket.org/idempiere/idempiere idempiere

これに時間がかかるようなら、Bitbucketからアーカイブをダウンロードしてもよい、https://bitbucket.org/idempiere/idempiere/downloads のTagsにあるv2.0を選択

### Eclipseの設定

#### ワークスペースディレクトリの指定

Eclipseのメニュー: File > Switch Workspace > Other からワークスペースを切り替えます。

クローンした下記のような構成のディレクトリをワークスペースとして指定します。

![idempiere-idempiere-2a7afff6e5f1.png](https://qiita-image-store.s3.amazonaws.com/0/7565/f8cc2a80-20b7-00fd-1332-7effdf4909f3.png "idempiere-idempiere-2a7afff6e5f1.png")



#### Buckminsterでマテリアル化

Eclipseのメニュー: File > Import から、Importダイアログを表示します。

ここから、Materialize from Buckminster MSPEC, CQUERY, or BOM を選択します。

![Import.png](https://qiita-image-store.s3.amazonaws.com/0/7565/ce0c284e-1868-5a83-943d-db9343a82790.png "Import.png")

次に、adempiere.mspecを選択します。

![Open.png](https://qiita-image-store.s3.amazonaws.com/0/7565/c111c6cb-58b4-4ce9-a604-b382a587e803.png "Open.png")

Nextで次へと進んでいきFinish後には、Eclipseが下記のようにパッケージが多数ロードされた状態になります。

![Java_-_Eclipse_-__Users_reoring_Desktop_idempiere-idempiere-2a7afff6e5f1.png](https://qiita-image-store.s3.amazonaws.com/0/7565/68701e32-0a4b-5e25-4632-c1f664ea7631.png "Java_-_Eclipse_-__Users_reoring_Desktop_idempiere-idempiere-2a7afff6e5f1.png")

この状態で、Eclipseメニュー: Project > Clean… を実行します。

### idempiere.propertiesの配置

idempiere.propertiesをワークスペースの直下に配置します。

```ini
#Adempiere
#Fri Dec 06 19:35:08 JST 2013
SingleInstancePerWindow=xyzN
WarningD=Einstellungen_nicht_aendern,_da_diese_undokumentierte_Nebenwirkungen_haben.
OpenWindowMaximized=xyzN
LoadTabMetaDataBackground=xyzN
UILookFeel=xyzAdempiere
StorePassword=xyzY
DataSource=xyzjava\:adempiereDB
Role=xyzGardenWorld Admin
CacheWindow=xyzY
ApplicationPassword=xyzGardenAdmin
Warning=Do_not_change_any_of_the_data_as_they_will_have_undocumented_side_effects.
TempDir=xyz/tmp
TraceLevel=xyzWARNING
LogMigrationScript=xyzN
AdempiereSys=xyzN
CDate=xyz2013-12-06 07\:44\:53.585
ShowTrl=xyzN
TraceFile=xyzN
Printer=xyz
AutoLogin=xyzN
Organization=xyz*
Client=xyzGardenWorld
PrintPreview=xyzN
ApplicationUserID=xyzGardenAdmin
Language=xyzEnglish
Charset=xyzUS-ASCII
ValidateConnectionOnStartup=xyzN
AutoNew=xyzN
Connection=xyzCConnection[name\=idempiere{idempiere-idempiere-adempiere},AppsHost\=idempiere,WebPort\=8080,SSLPort\=8443,type\=PostgreSQL,DBhost\=127.0.0.1,DBport\=5432,DBname\=idempiere,BQ\=false,FW\=false,FWhost\=,FWport\=0,UID\=adempiere,PWD\=adempiere]
UITheme=xyzAdempiere Theme
AutoCommit=xyzY
ShowAcct=xyzY            
```

### データベースの設定

PostgreSQLにiDempiereのDDLを流し込みます。

DDLは、クローンしたものには含まれていないようなので、本家のアーカイブから取り出します。http://www.idempiere.org/downloads ここから ```idempiereServer.gtk.linux.x86_64.zip``` を取得します。

zipファイルを展開したあと、data/seed/Adempiere_pg84.jar からPostgreSQLのdumpファイルを取り出します。

```jar xf data/seed/Adempiere_pg84.jar``` とすると、```Adempiere_pg84.dmp```が取り出せます。
これを、```psql -h localhost -d idempiere -f Adempiere_pg84.dmp```としてデータベースに展開します。

### 起動

実行設定のダイアログを表示します。

Eclipseメニュー: Run > Run Configurations

ダイアログ中の、Eclipse Application > server.product を選択します。

#### Mac OS Xでの実行時の注意

Macで実行するときはArgumentsタブのProgram arguments: を調整します。
最初は、```-os ${target.os} -arch ${target.arch} -nl ${target.nl} -consoleLog```こうなっています。が、${target.arch}の部分が正しく認識されないのでx86を指定します```-os ${target.os} -arch x86 -nl ${target.nl} -consoleLog -console```

--launcher.secondThreadという指定も必要なようですが、これが何を示しているかは、調べていません。ごめんなさい。追記: どうやらこれはSwingのスレッドをメインスレッドで実行しないためのオプションのようです。なので、WebUIには関係ありませんでした。

最終的にProgram arguments:は、```-os ${target.os} -arch x86 -nl ${target.nl} -consoleLog -console --launcher.secondThread```になります。

これで、 Runを実行し、ブラウザで http://localhost:8080/ を開けばiDempiereの画面が見えているはずです。他のプロセスが8080ポートを使っている場合は、事前にそのプロセスのポートを変更するか、idempiere.propertiesでポートを変更します。

## IDの固定化

iDempiereが使用しているZK Frameworkは、UI要素のID(HTMLエレメントのID)を動的に生成しています。これは自動テストには非常に厄介なので無効化します。

幸い、iDempiereにはID Generatorが用意されていてこれを使うだけで固定IDにすることが可能です。

### ローカル環境での変更

EclipseのRun Configurationから、server.product.functionaltest を選択して起動します。

### プロダクション環境での変更

zk.xmlというXML設定ファイルのコメントを外します。

```plugins/org.adempiere.ui.zk_1.0.0.v20131101-0745/WEB-INF/zk.xml
        <!-- system-config>
                <id-generator-class>org.adempiere.webui.AdempiereIdGenerator</id-generator-class>
        </system-config -->
```
これを、

```plugins/org.adempiere.ui.zk_1.0.0.v20131101-0745/WEB-INF/zk.xml
        <system-config>
                <id-generator-class>org.adempiere.webui.AdempiereIdGenerator</id-generator-class>
        </system-config>
```
こうして、service idempiere restartで再起動します。

プロダクション環境にiDempiereを構築するには、私が用意したVagrantとChefレシピを使うと簡単に構築できます。https://github.com/reoring/idempiere_vagrant



## 参考

* [Installation in Eclipse](http://wiki.idempiere.org/en/Installation_in_Eclipse)
* [iDempiere does not launch when using Eclipse on Mac OS](https://groups.google.com/forum/#!topic/idempiere/4Z9PXIzqVAU)
* [Build the iDempiere Project using Eclipse with buckminster](http://www.banym.de/eclipse/build-the-idempiere-project-using-eclipse-with-buckminster)