Magnolia5.2.2のGoogleSitemapモジュールをビルドする

Magnolia

Magnolia CMS 5.2.2 Community EditionでGoogle Sitemapを作成したところ例外が発生してサイトマップの生成が行われませんでした。Configurationの内容によって例外が発生するバグのようです。
コミュニティにはレポート済みですが、対応されるのがいつになるか不明なため、とりあえず問題が発生しない形でソース変更・リビルドしサイトマップ生成可能となったので、その手順に関してメモしておきます(今後も同様の手順でモジュールのリビルドが可能なはずなので)。

Google Sitemap が作成されない

Magnolia CMS には Google Sitemap モジュールが含まれており、簡単にGoogleサイトマップを生成する事が可能という事で、作成してみたのですが、、、、

環境

環境は以下になります。
当初Mavenは3.1.1を利用したのですが、ビルドできませんでした。作業環境はWindowsでなくても大丈夫ですが、以下手順はWindows(8.1)で行ったものになります。

作業PC Windows
Magnolia CMS 5.2.2 Community Edition
Apache Maven 2.2.1
Git 1.7.9
JavaSE 1.7.0_45

Google Sitemapの追加

Magnolia CMS CEにてGoogle Sitemapを追加するには以下のようにします。

  1. 管理画面トップから Google Sitemaps をクリックします。
    Magnolia Admin Top
  2. Google Sitemaps画面が開くので、[ Add site map ] をクリックします。
    Magnolia Google Sitemaps
  3. Edit Site Map Properties 画面が開くので値を編集します。
    まず、Site Map Properties タブの値を設定し、
    Magnolia Edit Sitemap properties
    Site Selection でサイトマップに含めるコンテンツ(のルート)を設定します。
    Magnolia Site selection
    設定が完了したら、[ 変更を保存 ] ボタンをクリックします。
  4. Google Sitemaps画面に戻るので、作成したサイトマップを選択し、[ Edit site map entries ] をクリックします。
    Magnolia Google Sitemaps
  5. Entries 画面が表示されます。ここではサイトマップに含まれるエントリ (=記事) の一覧が表示されます。更新頻度や優先度、サイトマップに含めるか否かといった設定をここから行う事ができます。
    設定を編集したいエントリを選択し、[ Edit entry properties ] をクリックします。
    Entries:Google-Sitemap
  6. Edit entry properties 画面が開くので、優先度(Priority)、更新頻度(Change frequency)、サイトマップに含めるか?(Hide, Hide children)が設定できます。必要に応じてエントリ毎の設定を編集します。
    Edit entry properties
上記手順で、Google Sitemapが作成されます。上図では Sitemap typeとして "Standard" を設定しましたが、"Mobile" を設定する事で、モバイル向けのサイトマップを生成する事も可能です。

Google Sitemapの確認

作成した Google Sitemap は生成時に指定したURIでアクセス可能になります。
例えば Magnolia CMS 自体が http://hogehoge/magnolia/ でアクセス可能の場合、上図の設定 (URI = /google-sitemap) ならば、http://hogehoge/magnolia/google-sitemap がサイトマップの URI になります。

という事で、Webブラウザでアクセスしてみたところ、以下のような画面が表示されてしまいました。

ログを見ると例外が発生しています。

2014-02-26 17:39:41,654 INFO gnolia.module.googlesitemap.service.SiteMapService: Requested siteMap info's for EDIT based on the following root: /index2
2014-02-26 17:39:41,656 ERROR freemarker.runtime : Template processing error: "Method public java.lang.String info.magnolia.module.googlesitemap.model.SiteMapModel.getXML() threw an exception when invoked on info.magnolia.module.googlesitemap.model.SiteMapModel@547dd38d"
Method public java.lang.String info.magnolia.module.googlesitemap.model.SiteMapModel.getXML() threw an exception when invoked on info.magnolia.module.googlesitemap.model.SiteMapModel@547dd38d
The problematic instruction:
----------
==> $
{model.getXML()!}
[on line 2, column 1 in sitemap/pages/mainXml.ftl]
in include "/sitemap/pages/mainXml.ftl" [on line 6, column 3 in sitemap/pages/main.ftl]
----------
Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: Method public java.lang.String info.magnolia.module.googlesitemap.model.SiteMapModel.getXML() threw an exception when invoked on info.magnolia.module.googlesitemap.model.SiteMapModel@547dd38d
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.DefaultToExpression._getAsTemplateModel(DefaultToExpression.java:100)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.Environment.include(Environment.java:1508)
at freemarker.core.Include.accept(Include.java:169)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.IfBlock.accept(IfBlock.java:82)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.Environment.process(Environment.java:199)
at freemarker.template.Template.process(Template.java:237)
at info.magnolia.freemarker.FreemarkerHelper.render(FreemarkerHelper.java:153)
at info.magnolia.rendering.renderer.FreemarkerRenderer.onRender(FreemarkerRenderer.java:96)
at info.magnolia.rendering.renderer.AbstractRenderer.render(AbstractRenderer.java:151)
at info.magnolia.rendering.engine.DefaultRenderingEngine.render(DefaultRenderingEngine.java:106)
at info.magnolia.rendering.engine.DefaultRenderingEngine$$EnhancerByCGLIB$$8b53d72b.render()
at info.magnolia.rendering.engine.RenderingFilter.render(RenderingFilter.java:204)
at info.magnolia.rendering.engine.RenderingFilter.handleTemplateRequest(RenderingFilter.java:138)
at info.magnolia.rendering.engine.RenderingFilter.doFilter(RenderingFilter.java:91)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.rendering.model.ModelExecutionFilter.doFilter(ModelExecutionFilter.java:101)
at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.AggregatorFilter.doFilter(AggregatorFilter.java:103)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.RepositoryMappingFilter.doFilter(RepositoryMappingFilter.java:100)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:74)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:68)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58)
at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:66)
at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:153)
at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:73)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:84)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:83)
at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:93)
at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.module.templatingkit.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:106)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:82)
at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:104)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:89)
at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.module.devicedetection.filter.DeviceDetectionFilter.doFilter(DeviceDetectionFilter.java:71)
at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:103)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:129)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:106)
at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:66)
at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:107)
at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:93)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NullPointerException
at info.magnolia.module.googlesitemap.service.SiteMapService.feedSiteMapBeans(SiteMapService.java:242)
at info.magnolia.module.googlesitemap.service.SiteMapService.getSiteMapBeanForSite(SiteMapService.java:154)
at info.magnolia.module.googlesitemap.service.SiteMapService.getSiteMapBeans(SiteMapService.java:438)
at info.magnolia.module.googlesitemap.service.SiteMapXMLUtilImpl.generateSiteMapXML(SiteMapXMLUtilImpl.java:90)
at info.magnolia.module.googlesitemap.model.SiteMapModel.getXML(SiteMapModel.java:103)
at sun.reflect.GeneratedMethodAccessor536.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:866)
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106)
... 127 more

MagnoliaのGithubで例外が発生している SiteMapService.javaのソースを見たところ、i18nのサポートの有無によって、分岐をしている箇所でNullPointerExceptionが発生しているようです。

                        // Check Multilang.
                        if(i18nSupport.isEnabled() && site.getI18n().isEnabled()) {
                            Locale currentLocale = i18nSupport.getLocale();

MagnoliaのConfigurationでi18nの設定を(フロントの日本語化のために)変更している部分 /server/i18n/content/enabled があるのですが、この設定を true から false に戻したら問題が解消しました。
但し、この設定に変更した場合、サイトの多言語対応が行えなくなってしまいます。
Magnolia には デモサイト があるので (Enterprise Editionが動作している)、こちらでも試してみましたが、こちらでは再現できませんでした。おそらく、Enterprise Editionはマルチサイトに対応しているため問題ないが、マルチサイト非対応のCommunity Editionでは例外が発生するように思われます。

Magnolia Community に レポート はしたのですが、すぐには対応されそうになかったので、自分で直す事にしました。

モジュールの取得

作業を行うためのディレクトリを適当に作成します。仮にC:\work とします。
以下特に断りのない場合、コマンドプロンプトからの作業になります。

  1. ディレクトリを作成し、ここに移動します。
    C:\> md c:\work
    C:\> cd c:\work
    
  2. Magnolia のソースは git で管理されています。google-sitemap モジュールのレポジトリからソースを取得します。
    C:\work> git clone http://git.magnolia-cms.com/git/modules/google-sitemap.git
    

ソースの編集、及び、ビルド

  1. 問題のソースを編集します。適当なテキストエディタを利用して編集して下さい。(メモ帳は非推奨)
    今回編集する SiteMapService.javaのパスは以下になります
    C:\work\google-sitemap\src\main\java\info\magnolia\module\googlesitemap\service\SiteMapService.java
    編集内容は以下。大外の try - catch ブロックを追加。(やっつけです)。
                            // Check Multilang.
                            try {
                            if(i18nSupport.isEnabled() && site.getI18n().isEnabled()) {
                                Locale currentLocale = i18nSupport.getLocale();
                                for(Locale locale:site.getI18n().getLocales() ){
                                    i18nSupport.setLocale(locale);
                                    SiteMapEntry siteMapBeanLocale = populateBean(child, false, isForEdit, site, null);
                                    if(siteMapBeanLocale != null) {
                                        siteMapBeans.add(siteMapBeanLocale);
                                    }
                                }
                                i18nSupport.setLocale(currentLocale);
                            } else {
                                siteMapBeans.add(siteMapBean);
                            }
                            } catch (Exception e) {
                                siteMapBeans.add(siteMapBean);
                            }
    
  2. 編集が完了したらビルドします。
    C:\work> cd google-sitemap
    C:\work\google-sitemap> mvn install
    

    ちなみに最初Maven 3.1.1でビルドしたときには、以下エラーが発生してビルドできませんでした。

    C:\work\google-sitemap>mvn install
    [WARNING]
    [WARNING] Some problems were encountered while building the effective settings
    [WARNING] Unrecognised tag: 'plugin' (position: START_TAG seen ...\n    -->\n\n ... @214:10)  @ C:\apache-maven-3.1.1\bin\..\conf\settings.xml, line 214, column 10
    [WARNING]
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Google Sitemap Module 2.0.3-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [WARNING] The POM for org.vaadin.addons:icepush:jar:0.5.3 is missing, no dependency information available
    [WARNING] The POM for org.vaadin.addons:cssinject:jar:2.0.3 is missing, no dependency information available
    [WARNING] The POM for org.vaadin.addons:aceeditor:jar:0.8.5 is missing, no dependency information available
    [WARNING] The POM for org.vaadin.addons:gwt-graphics:jar:1.0.0 is missing, no dependency information available
    [WARNING] The POM for org.vaadin.addons:ckeditor-wrapper-for-vaadin:jar:7.8.3 is missing, no dependency information available
    [WARNING] The POM for org.vaadin.addon:easyuploads:jar:7.0.0 is missing, no dependency information available
    [WARNING] The POM for org.vaadin.addons:imagefilter:jar:0.5.3 is missing, no dependency information available
    [WARNING] The POM for org.vaadin.addons:customfield:jar:1.0.0 is missing, no dependency information available
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.733s
    [INFO] Finished at: Tue Mar 04 12:33:55 GMT+09:00 2014
    [INFO] Final Memory: 11M/219M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal on project magnolia-module-google-sitemap: Could not resolve dependencies for project info.magnolia:magnolia-module-google-sitemap:jar:2.0.3-SNAPSHOT: The following arti
    facts could not be resolved: org.vaadin.addons:aceeditor:jar:0.8.5, org.vaadin.addons:cssinject:jar:2.0.3, org.vaadin.addons:icepush:jar:0.5.3, org.vaadin.addons:gwt-graphics:jar:1.0.0, org.vaadin.add
    ons:ckeditor-wrapper-for-vaadin:jar:7.8.3, org.vaadin.addon:easyuploads:jar:7.0.0, org.vaadin.addons:imagefilter:jar:0.5.3, org.vaadin.addons:customfield:jar:1.0.0: Failure to find org.vaadin.addons:a
    ceeditor:jar:0.8.5 in http://nexus.magnolia-cms.com/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of magnolia.nexus.public has
     elapsed or updates are forced -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
    
  3. Maven 2.2.1を利用して、ビルドしたところ無事に jarファイルが生成されました。

    C:\work\google-sitemap>\apache-maven-2.2.1\bin\mvn install
    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Google Sitemap Module
    [INFO]    task-segment: [install]
    [INFO] ------------------------------------------------------------------------
    
    (中略)
    
    Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.565 sec
    
    Results :
    
    Tests run: 25, Failures: 0, Errors: 0, Skipped: 1
    
    [INFO] [jar:jar {execution: default-jar}]
    [INFO] Building jar: C:\work\google-sitemap\target\magnolia-module-google-sitemap-2.0.3-SNAPSHOT.jar
    [INFO] [checkstyle:check {execution: default}]
    [WARNING] File encoding has not been set, using platform encoding MS932, i.e. build is platform dependent!
    [INFO] Starting audit...
    Audit done.
    
    [INFO] [install:install {execution: default-install}]
    [INFO] Installing C:\work\google-sitemap\target\magnolia-module-google-sitemap-2.0.3-SNAPSHOT.jar to C:\Users\suda\.m2\repository\info\magnolia\magnolia-module-google-sitemap\2.0.3-SNAPSHOT\magnolia-m
    odule-google-sitemap-2.0.3-SNAPSHOT.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 20 seconds
    [INFO] Finished at: Tue Mar 04 12:36:12 GMT+09:00 2014
    [INFO] Final Memory: 77M/524M
    [INFO] ------------------------------------------------------------------------
    

確認

ビルドしたモジュールを既存のものと置き換えてテストします。

Magnolia CMSのインストールディレクトリ 以下 /WEB-INF/lib ディレクトリにある
magnolia-module-google-sitemap-2.0.1.jar を
magnolia-module-google-sitemap-2.0.3-SNAPSHOT.jar
に置き換え、Tomcat を再起動します。

Magnoliaのライブラリを置き換えた場合、最初のMagnoliaCMSへのアクセスの際にアップデート処理が走ります。Webブラウザに表示されるウィザードに従ってアップデートを行い、処理を完了させます。

肝心のGoogle Sitemapですが、上記変更によって生成が行われるようになりました。
ソースの変更内容を見てもわかるように、かなりやっつけな対応ですが、PC/モバイル用のGoogle Sitemapを生成して Google Webmaster Toolsにて設定できた事、また、Magnolia 5のモジュールの変更手順を実際に確認できたので、とりあえずはこれで良しとします ( ちゃんとした対応はコミュニティの方で行ってくれるかと思うので )。