2015©
2015年2月18日
Jun Terashita
第26回 Alfresco勉強会
Alfresco SDK + Eclipseで開発してみよう
2015©2
Alfresco SDK とは
• Alfrescoをカスタマイズするための開発ツール。
• Maven Alfresco SDKと呼ばれていたが、2.0がリリースされたタイミングで単にAlfresco SDK
という名前に変わった。
• alfresco-amp-archetype、share-amp-archetype、alfresco-allinone-archetype
(alfresco、share、solrの全部入り)の3種類がある。
• Alfresco SDK 2.0ではホットリロードできるようになったため、開発効率が向上している。
(参考)
Alfresco SDK
https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-sdk-aggregator/
latest/index.html
Git Hub
https://github.com/Alfresco/alfresco-sdk/
Alfresco Community Edition 5.0のオンラインヘルプ
http://docs.alfresco.com/community/concepts/alfresco-sdk-intro.html
2015©3
Alfresco SDKとAlfrescoの互換性
Alfresco
version
Maven Alfresco
Lifecycle
(deprecated)
Maven SDK
1.0.x
(deprecated)
Maven SDK
1.1.x
Alfresco SDK
2.0.x
3.2.2 - 4.1.1.x
Compatible (but
not supported)
Not available Not available Not available
4.1.x (x >=2) Not available
Compatible (but
not supported)
Not available Not available
4.2.x Not available Not available
Compatible and
supported
Not available
5.0+ Not available Not available Not available
Compatible and
supported
Alfresco SDK 2.0はAlfresco 5.x以降で使用可能
http://docs.alfresco.com/community/concepts/alfresco-sdk-compatibility.html
2015©4
必要なもの
http://docs.alfresco.com/community/concepts/alfresco-sdk-install-requirements.html
• Maven 3.2.5+
• JDK 1.7+
• Eclipse Luna(4.4)+ (m2eプラグインも必要)
Alfresco AMP用のプロジェクトを作成
2015©6
ご説明する手順について
だいたい以下のAlfresco Community 5.0のオンラインヘルプどおりの手順ですが、Mavenビ
ルドの実行方法等、一部手順を変えてある部分があります。
http://docs.alfresco.com/community/tasks/alfresco-sdk-rad-eclipse-amp-project.html
2015©7
ウィザードでMavenプロジェクトを作成(1/2)
Package Explorerで右クリック
New > Project... を選択
Maven > Maven Project を選択してNextをクリック
2015©8
ウィザードでMavenプロジェクトを作成(2/2)
「Create a simple project (skip archetype selection)」 のチェックを外して(たぶん最初から
外れている)Nextをクリック
2015©9
アーキタイプカタログを追加(1/4)
「Configure ...」をクリック
2015©10
アーキタイプカタログを追加(2/4)
「Add Remote Catalog ...」をクリック
2015©11
アーキタイプカタログを追加(3/4)
以下のとおり入力(Descriptionはわかりやすければ何でもよい)してOKをクリック
Catalog File: http://repo1.maven.org/maven2/archetype-catalog.xml
Description : Alfresco Archetypes 2.0
2015©12
アーキタイプカタログを追加(4/4)
もう一度OKをクリック
2015©13
Repository AMP用のプロジェクトを作成(1/2)
Catalogは先ほど作成したAlfresco Archetypes 2.0を選択
Filterにorg.alfrescoと入力
Artifact Idがalfresco-amp-archetypeの行を選択してNextをクリック
2015©14
Repository AMP用のプロジェクトを作成(2/2)
Group Id、Artifact Id、Packageを適当に入力してFinishをクリック
※初回はここでけっこう時間がかかります。
2015©15
補足:m2e connectorsの追加(1/2)
プロジェクト作成後にエラーが発生していたらMarkersタブで問題を右クリックしてQuick Fix
を選択
Discover new m2e connectorsを選択してFinishをクリック
2015©16
補足:m2e connectorsの追加(2/2)
Finishをクリック
Licence agreementに同意してFinishをクリック
Warningが出たら内容を確認してOKをクリック
Eclipseを再起動するよう促されるのでYesをクリックして再起動
2015©17
補足:プロジェクトの構造
pom.xml
• archetypeのバージョンやAlfrescoのバージョン、ロ
グレベル等、ビルドする際の各種プロパティを必要
に応じて設定
src/main/java
• Javaのソースコード
• ビルドするとJarにまとめられる
src/main/amp • Javaのソースコード以外のリソース
src/test/java • ユニットテスト用のソースコード
src/test/resources • テスト用の設定ファイル
src/test/properties/<env>
• <env>毎に異なるalfresco-global.properties
• デフォルトの<env>はlocal(pom.xmlで指定)
ビルドとデプロイ
2015©19
Mavenによるビルドとデプロイ
Alfrescoのオンラインヘルプの以下のドキュメントではEclipseから実行する方法が書かれてい
ますが、プロジェクトのルートディレクトリにあるrun.shを実行する方が簡単です。
http://docs.alfresco.com/community/tasks/alfresco-sdk-rad-eclipse-amp-project.html
ターミナルでプロジェクトのルートディレクトリに移動し、run.shを実行します。
※初回はけっこう時間かかります。
#!/bin/bash
# Downloads the spring-loaded lib if not existing and runs repository AMP
springloadedfile=~/.m2/repository/org/springframework/springloaded/1.2.0.RELEASE/
springloaded-1.2.0.RELEASE.jar
if [ ! -f $springloadedfile ]; then
mvn validate -Psetup
fi
MAVEN_OPTS="-javaagent:$springloadedfile -noverify -Xms256m -Xmx2G -XX:PermSize=300m"
mvn integration-test -Pamp-to-war
ホットリロードを可能にするSpring Loadedのインストールや
MAVEN_OPTSの設定もやってくれる。
2015©20
ブラウザで確認
ブラウザで以下のURLを開く。AdministratorのID/PWはadmin/admin。
http://localhost:8080/alfresco
※alfresco-amp-archetypeではShareは起動しない。
2015©21
その他の使い方
mvn package • ユニットテストを実行し、ampファイルを作成
mvn install
• package + Mavenのローカルリポジトリへのインスト
ール(?)
mvn install -Pamp-to-war
• install + WARとAMPをデプロイしたTomcatの起動
(実質はmvn integration-test -Pamp-to-war と同じ?)
mvn clean -Ppurge • DB、alf_data、インデックス、ログファイルの削除
ホットリロードを試す
2015©23
ホットリロード:WebScriptのjsとftl
ブラウザで以下のURLにアクセスすると、「Message: Hello World!」と表示される。
http://localhost:8080/alfresco/service/sample/helloworld
Eclipseで以下のファイルを開き、内容を変更するとブラウザでリロードするだけで変更が反映
される。
src/main/amp/config/alfresco/extension/templates/webscripts/webscript.get.js
src/main/amp/config/alfresco/extension/templates/webscripts/webscript.get.html.ftl
2015©24
ホットリロード:Javaのクラス
サンプルコードのDemoComponent.childNodesCountに以下の行を追記して保存する。
System.out.println("childNodesCount has been executed");
public int childNodesCount(NodeRef nodeRef)
{
System.out.println("childNodesCount has been executed");
log.debug("childNodesCount has been executed");
return nodeService.countChildAssocs(nodeRef, true);
}
パッケージエクスプローラでユニットテスト用のDemoComponentTest.javaを右クリックし、
Run As > JUnit Test を選択すると、ユニットテストが実行されてEclipseのコンソールタブま
たはターミナルに「childNodesCount has been executed」と表示される。
2015©25
補足:ログレベルの設定
Alfresco Repo AMP Archetypeから作成したプロジェクトでは、以下のファイルにログレベル
が設定されているが、module.log.levelというパラメータはどこにも設定されていない。
src/main/amp/config/alfresco/module/<artifactId>/log4j.properties
以下のいずれかの方法で設定する。
1. Mavenのコマンドを実行する際にオプションで指定する。

$ mvn integration-test -Dmodule.log.level=DEBUG
2. POMの<properties>で設定する。

※POMを変更した際は再起動が必要。
log4j.logger.org.alfresco.demoamp.DemoComponent=${module.log.level}
…
<properties>
…
<module.log.level>DEBUG</module.log.level>
…
</properties>
…
MySQLを使う場合
2015©27
開発用DBの作成
以下のSQLを実行して開発用のDBを作成する(DB名やユーザ、パスワードは後でpom.xmlに
書くプロパティと合っていれば何でもよい)。
create database alfrescoamp default character set utf8;
grant all on alfrescoamp.* to 'alfresco'@'localhost' identified by 'alfresco' with
grant option;
grant all on alfrescoamp.* to ‘alfresco'@'localhost.localdomain' identified by
'alfresco' with grant option;
2015©28
POMにMySQL用のdependencyを設定
POMにdependencyを設定する。
<dependencies>
...
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
</dependency>
</dependencies>
「Overriding managed version 5.1.31 for mysql-connector-java」というWarning
が出るためversionは指定しない方がよいかも(指定しなくても動いた)。
artifactId : alfresco-parent のPOMのpropertiesに
<dependency.mysql.version>5.1.31</dependency.mysql.version>
が指定されている。
2015©29
POMにDB接続用のパラメータを設定
POMのpropertiesにDB接続用のパラメータを設定する。
<properties>
...
<!-- MySQL configuration -->
<alfresco.db.name>alfrescoamp</alfresco.db.name>
<alfresco.db.username>alfresco</alfresco.db.username>
<alfresco.db.password>alfresco</alfresco.db.password>
<alfresco.db.host>localhost</alfresco.db.host>
<alfresco.db.port>3306</alfresco.db.port>
<alfresco.db.params></alfresco.db.params>
<alfresco.db.url>jdbc:mysql://${alfresco.db.host}:${alfresco.db.port}/$
{alfresco.db.name}</alfresco.db.url>
<alfresco.db.datasource.class>org.gjt.mm.mysql.Driver</
alfresco.db.datasource.class>
</properties>
2015©30
既存のalf_dataを削除してAlfrescoを起動
ターミナルで mvn clean -Ppurge を実行した上で、 run.sh を実行する。
以上。
2015©32
最後に
• プロジェクトの作り方はshare-amp-archetypeもalfresco-allinone-archetypeも同じです。た
だ、alfresco-allinone-archetypeはマルチモジュールになっています。
• カスタムモデルの定義やWebScriptの開発、ShareのUIのカスタマイズ方法等、SDKを使った
具体的な開発については今後の勉強会で紹介したいと思います。
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう

Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう