alfresco勉強会#26 alfresco sdk + eclipseで開発してみよう

33

Click here to load reader

Upload: jun-terashita

Post on 22-Jul-2015

440 views

Category:

Software


2 download

TRANSCRIPT

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

2015©

2015年2月18日

Jun Terashita

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

Page 2: Alfresco勉強会#26 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

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

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.xCompatible (but not supported)

Not available Not available Not available

4.1.x (x >=2) Not availableCompatible (but not supported)

Not available Not available

4.2.x Not available Not availableCompatible and supported

Not available

5.0+ Not available Not available Not availableCompatible and supported

Alfresco SDK 2.0はAlfresco 5.x以降で使用可能 http://docs.alfresco.com/community/concepts/alfresco-sdk-compatibility.html

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

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プラグインも必要)

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

Alfresco AMP用のプロジェクトを作成

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

2015©6

ご説明する手順についてだいたい以下のAlfresco Community 5.0のオンラインヘルプどおりの手順ですが、Mavenビルドの実行方法等、一部手順を変えてある部分があります。

http://docs.alfresco.com/community/tasks/alfresco-sdk-rad-eclipse-amp-project.html

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

2015©7

ウィザードでMavenプロジェクトを作成(1/2)Package Explorerで右クリック New > Project... を選択 Maven > Maven Project を選択してNextをクリック

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

2015©8

ウィザードでMavenプロジェクトを作成(2/2)「Create a simple project (skip archetype selection)」 のチェックを外して(たぶん最初から外れている)Nextをクリック

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

2015©9

アーキタイプカタログを追加(1/4)「Configure ...」をクリック

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

2015©10

アーキタイプカタログを追加(2/4)「Add Remote Catalog ...」をクリック

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

2015©11

アーキタイプカタログを追加(3/4)以下のとおり入力(Descriptionはわかりやすければ何でもよい)してOKをクリック

Catalog File : http://repo1.maven.org/maven2/archetype-catalog.xml Description : Alfresco Archetypes 2.0

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

2015©12

アーキタイプカタログを追加(4/4)もう一度OKをクリック

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

2015©13

Repository AMP用のプロジェクトを作成(1/2)Catalogは先ほど作成したAlfresco Archetypes 2.0を選択 Filterにorg.alfrescoと入力 Artifact Idがalfresco-amp-archetypeの行を選択してNextをクリック

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

2015©14

Repository AMP用のプロジェクトを作成(2/2)Group Id、Artifact Id、Packageを適当に入力してFinishをクリック ※初回はここでけっこう時間がかかります。

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

2015©15

補足:m2e connectorsの追加(1/2)プロジェクト作成後にエラーが発生していたらMarkersタブで問題を右クリックしてQuick Fixを選択 Discover new m2e connectorsを選択してFinishをクリック

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

2015©16

補足:m2e connectorsの追加(2/2)Finishをクリック Licence agreementに同意してFinishをクリック Warningが出たら内容を確認してOKをクリック Eclipseを再起動するよう促されるのでYesをクリックして再起動

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

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で指定)

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

ビルドとデプロイ

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

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の設定もやってくれる。

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

2015©20

ブラウザで確認ブラウザで以下のURLを開く。AdministratorのID/PWはadmin/admin。

http://localhost:8080/alfresco

※alfresco-amp-archetypeではShareは起動しない。

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

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、インデックス、ログファイルの削除

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

ホットリロードを試す

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

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

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

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」と表示される。

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

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>…

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

MySQLを使う場合

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

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;

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

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>

が指定されている。

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

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>

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

2015©30

既存のalf_dataを削除してAlfrescoを起動ターミナルで mvn clean -Ppurge を実行した上で、 run.sh を実行する。

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

以上。

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

2015©32

最後に• プロジェクトの作り方はshare-amp-archetypeもalfresco-allinone-archetypeも同じです。ただ、alfresco-allinone-archetypeはマルチモジュールになっています。

• カスタムモデルの定義やWebScriptの開発、ShareのUIのカスタマイズ方法等、SDKを使った具体的な開発については今後の勉強会で紹介したいと思います。

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