会社で使っているスケジュールボードをリモートからも見たくてGoogleカレンダーと同期できないか思案してのPG。
久々なので、Eclipse3.6の環境をきれいにクリーンインストールしてからスタート。
まずは、GDateのサンプルをダウンロード。Eclipseで新規Javaプロジェクトを構築して解凍した一式を配置。
ただ、J2EEライブラリへのパスが無かったので、 GlassFishのライブラリを追加。最初は該当JARを探すも、
1.windows>設定>サーバ>ランタイム環境より、追加でJ2EEコンテナを追加
2.プロジェクトのビルドパスに ライブラリの追加>サーバ・ランタイムを行う
で適当なライブラリを追加してくれるので、コンパイルは通るようになる。
今回動かしたいカレンダーのサンプルのREADME.txtを見ると
The application can be built and run using the provided Ant build file found atgdata/java/build.xml. The sample can be run in the following manner:
1. Edit gdata/java/build.properties to enter your Google Account username and
password, as well as the feed URI on which you want to test the sample.
2. Invoke the sample using the following commandline:
とあるので、gdate直下(今回はプロジェクト直下)にbuild-samplesスクリプトは以下の、build.propertiesをコピーして、build.samples.xmlのsample.calendar.runを実効すると
Buildfile: C:\Users\jun\workspace\GoogleCalenderSample\build-samples.xmlsample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
sample.calendar.build:
sample.calendar.run:
sample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
sample.calendar.build:
sample.calendar.eventfeed.run:
[java] java.lang.NoClassDefFoundError: sample/calendar/EventFeedDemo
[java] Caused by: java.lang.ClassNotFoundException: sample.calendar.EventFeedDemo
[java] at java.net.URLClassLoader$1.run(Unknown Source)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at java.net.URLClassLoader.findClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] Could not find the main class: sample.calendar.EventFeedDemo. Program will exit.
[java] Exception in thread "main"
sample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
sample.calendar.build:
sample.calendar.calendarfeed.run:
[java] java.lang.NoClassDefFoundError: sample/calendar/CalendarFeedDemo
[java] Caused by: java.lang.ClassNotFoundException: sample.calendar.CalendarFeedDemo
[java] at java.net.URLClassLoader$1.run(Unknown Source)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at java.net.URLClassLoader.findClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] Could not find the main class: sample.calendar.CalendarFeedDemo. Program will exit.
[java] Exception in thread "main"
sample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
sample.calendar.build:
sample.calendar.aclfeed.run:
[java] java.lang.NoClassDefFoundError: sample/calendar/AclFeedDemo
[java] Caused by: java.lang.ClassNotFoundException: sample.calendar.AclFeedDemo
[java] at java.net.URLClassLoader$1.run(Unknown Source)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at java.net.URLClassLoader.findClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] Could not find the main class: sample.calendar.AclFeedDemo. Program will exit.
[java] Exception in thread "main"
BUILD SUCCESSFUL
Total time: 1 second
と出る。解凍したパッケージを適切にプロジェクトに配置できていなかったので修正して実施。(SRCフォルダと、build.xmlの関係が不適切だった)
Buildfile: C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples.xmlsample.appsforyourdomain.dependencies:
template.require.service.jar:
BUILD FAILED
C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples\appsforyourdomain.xml:40: The following error occurred while executing this line:
C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples\core.xml:61: Missing dependency jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples/..//lib/gdata-appsforyourdomain-${appsforyourdomain.spec.version}.jar
Please run "ant appsforyourdomain.build.appsforyourdomain".
Total time: 322 milliseconds
今度は、version.propertiesを適当なフォルダに置けていなかった。配置を修正してひとまず、サンプルは動いた。でも、内部エラーも出ている。今日はひとまずここまで。
Buildfile: C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples.xmlsample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes
[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar
sample.calendar.build:
[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar
sample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes
[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
sample.calendar.build:
[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar
sample.calendar.run:
sample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes
[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar
sample.calendar.build:
[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes
sample.calendar.eventfeed.run:
[java] Your calendars:
[java]
[java] ��{�̏j��
[java] Printing all events
[java] All events on your calendar:
[java] test
[java] Full text query
[java] Events matching Tennis:
[java] Events from 2007-01-05 to 2007-01-07:
[java] Successfully created event Tennis with Mike
[java] Successfully created quick add event Tennis with John April 1
[java] Successfully created web content event World Cup
[java] Successfully created recurring event Tennis with Dan
[java] Event's new title is "Important meeting".
[java] Set a 15 minute EMAIL reminder for the event.
[java] Successfully deleted all events via batch request.
sample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes
[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar
sample.calendar.build:
[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar
sample.calendar.calendarfeed.run:
[java] Calendars in metafeed
[java]
[java] ��{�̏j��
[java] Calendars in allcalendars feed
[java]
[java] ��{�̏j��
[java] Calendars in owncalendars feed
[java]
[java] Creating a secondary calendar
[java] Updating the secondary calendar
[java] Deleting the secondary calendar
[java] The server had a problem handling your request.
[java] com.google.gdata.util.ServiceException: Internal Server Error
[java] at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:624)
[java] at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563)
[java] at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552)
[java] at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530)
[java] at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)
[java] at com.google.gdata.client.Service.delete(Service.java:1738)
[java] at com.google.gdata.client.GoogleService.delete(GoogleService.java:699)
[java] at com.google.gdata.data.BaseEntry.delete(BaseEntry.java:669)
[java] at sample.calendar.CalendarFeedDemo.deleteCalendar(CalendarFeedDemo.java:173)
[java] at sample.calendar.CalendarFeedDemo.main(CalendarFeedDemo.java:277)
sample.calendar.dependencies:
template.require.service.jar:
sample.core.dependencies:
core.sample.core.util.build:
[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes
[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar
sample.calendar.build:
[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar
[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar
sample.calendar.aclfeed.run:
[java] Access control lists for your calendars:
[java] Calendar "":
[java] Scope: Type=USER ()
[java] Role: http://schemas.google.com/gCal/2005#owner
BUILD SUCCESSFUL
Total time: 21 seconds
PS:Eclipse3.6でAnt使ったが、Taskへのリンク機能が超便利。また、外部ファイルをproperty file属性で読み込んでいるのも知らないテクなので関心。Googleのサンプルでは、JARファイルのバージョンをversion.xmlとして外出しにして、指定したバージョンのファイルを取得する作りとなっていた。Eclipseプロジェクトのビルドパスが動的に指定出来れば良い手として使えそう。