こちらのサンプルプログラムは Java 9 以降では動作しません。
Garoon と Google Calendar とを連携させたい場合は、株式会社ノベルワークスのカレンダー連携ソリューション ガル助(有償)の利用をご検討ください。
本サンプルプログラムとの大きな違いは次のとおりです。
・Google Calendar だけでなく、Office 365 とも連携が可能
・双方向連携が可能
・複数ユーザーのスケジュール同期が可能
(著者:サイボウズ 竹内 能彦)
はじめに
Googleカレンダー使っていますか?自分の予定と他の方の予定を並べて表示したり、予定を共有したり出来てとっても便利ですよね。
そこにGaroonの予定を並べて見られたらもっと便利になると思いませんか?
そんな思い付きからGaroonの予定をGoogleカレンダーに表示する連携プログラムを作成しました。事前準備が少し大変ですが、皆さん是非使ってみてください。
概要
連携プログラムは以下の処理をコマンドラインから実行できるサンプルプログラムです。
- Garoonに登録された予定をGoogleカレンダーに登録
- Garoonで更新された予定をGoogleカレンダーに反映
- Garoonから削除された予定をGoogleカレンダーから削除
Googleカレンダーに登録する情報はGaroonの予定の「開始日時」、「終了日時」、「施設」、「メモ」、「コメント」、「参加者」です。
動作環境
- プログラム実行用端末(Java8が動作し、Garoon、Googleカレンダーにネットワーク接続できること)
2018年3月現在、Java9では動作しないことを確認しています。 - Garoon on cybozu、パッケージ版 サイボウズ ガルーン3.0.0以降
- Googleカレンダー
Garoon on cybozu、Googleカレンダーは2018年2月版で確認しています。
事前準備
実行するには連携プログラムの設定だけでなく、GoogleアカウントやGoogleカレンダーの設定が必要になります。
また、GoogleアカウントやGoogleカレンダーの設定内容を連携プログラムの設定に利用するため、メモが必要な項目はその都度注釈を入れてあります。
※現在のGGsyncはOAuth2.0にも対応していますが、本ページではサービスアカウントキー認証を利用します。
1.Googleアカウント作成
下記URLから、Googleアカウントを作成します。Googleアカウントを取得済みの方はログインしてください。
https://accounts.google.com/SignUp
2.Google APIの利用設定
下記URLから、プロジェクトを作成します。
https://console.developers.google.com/project
プロジェクト名には適当な値を入力してください。
プロジェクトの作成完了後、Google Calendar APIを検索し、
Google Calendar APIを有効にします。
認証情報を作成します。
下記画像の通りの内容を選択し、「必要な認証情報」をクリックします。
サービスアカウント名には適当な値を入力し、キーのタイプはP12を選択します。
役割なしで作成します。
自動ダウンロードされたP12キー(以下、秘密鍵(拡張子がp12))は以降の手順で利用しますので任意のフォルダに保存します。
次にサービスアカウント IDを確認します。
画面右の「サービスアカウントの管理」をクリックし、
表示されたサービスアカウント IDをメモします。(以降の手順で利用します)
3.Googleカレンダーの作成
下記URLから、Garoonのスケジュールを連携させるGoogleカレンダーを作成します。
https://www.google.com/calendar
カレンダーの作成完了後、Googleカレンダー設定の「このカレンダーを共有」タブを開きます。先ほどのメールアドレスに予定の変更権限を付与し、保存します。
Googleカレンダー設定の「カレンダー情報」タブを開き、カレンダーIDを確認します。カレンダーIDは以降の手順で利用しますのでメモしてください。
4.連携プログラムの設定
プログラム実行用端末に連携プログラムを動作させるフォルダを作成します。本設定では例として「C:/GGsync」を利用します。
秘密鍵を「C:/GGsync」に移動します。
実行ファイルと設定ファイルをダウンロードしてください。ソースはGitHubで管理しています。(外部サイトが開きます)
実行ファイル「GGsync.jar」と設定ファイル「GGsync.properties」を「C:/GGsync」に移動します。
設定ファイル「GGsync.properties」をテキストエディタで開き、コメントに従い設定します。
Googleカレンダーに登録する予定の色は1から11までの数値を指定できます。下記の色を参考に選択してください。
各カラーIDのカラーコードはこちらのコメントから確認できます。
(tomomo85さん 情報ありがとうございます)
実行手順
プログラム実行用端末でコマンドプロンプトを起動し、以下のコマンドを入力します。
> java -jar C:/GGsync/GGsync.jar C:/GGsync
コマンドの形式は「 java -jar 実行ファイルのパス 設定ファイルが存在するフォルダ」です。
「The sync completed.」と表示されればスケジュール連携に成功しています。
実行結果は設定ファイルが存在するフォルダ配下のGGsync.db(例ではC:/GGsync/GGsync.db)に保存します。GGsync.dbは次回実行時の差分反映に利用します。
プロキシ経由の実行
プロキシを経由する必要がある場合は下記のオプションを追加して実行してください。
> java -Dhttp.proxyHost=ホスト名 -Dhttp.proxyPort=ポート番号 -Dhttps.proxyHost=ホスト名 -Dhttps.proxyPort=ポート番号 -jar C:/GGsync/GGsync.jar C:/GGsync
オプションの詳細はこちら(Oracle社のドキュメントページが開きます)
セキュアアクセス利用時の実行
セキュアアクセスを利用する必要がある場合は、クライアント証明書をGGsync.jarと同じディレクトリに保存し、下記のオプションを追加して実行してください。
> java -Djavax.net.ssl.keyStore=xxxx.pfx -Djavax.net.ssl.keyStorePassword=xxxx -Djavax.net.ssl.keyStoreType=PKCS12 -jar GGsync.jar .
実行例
下記がGaroonのスケジュール、実行結果、予定が反映されたGoogleカレンダーの例になります。
・Garoonのスケジュール
・連携プログラムの実行結果
・Googleカレンダー(プライベートな予定と並べて表示)
Garoonの予定の「メモ」、「コメント」はGoogleカレンダーの「説明」にまとめて登録します。
Garoonの予定が変更された場合は、Googleカレンダーの予定を削除してから再登録します。
下記が変更時の実行例になります。
Garoonの予定が削除された場合は、Googleカレンダーの予定を削除します。
下記が削除時の実行例になります。
定期実行
タスクスケジューラなどを利用することで、定期的にGaroonの予定をGoogleカレンダーに反映できます。
是非試してみてください。
連携プログラムの更新履歴
2015/3/30 繰り返し予定が正常に登録されない不具合を改修しました。
2015/4/24 終了時間未指定の予定がエラーになる不具合を改修しました。
2015/6/18 連携失敗時に詳細なエラーを出力するように修正しました。
2015/9/16 日本語文字のアカウント名に対応しました。
2016/1/14 Googleカレンダーに「参加者」を登録する機能を追加しました。
2016/3/24 ソースコードをGitHubに移しました。
2017/3/21 セキュアアクセス利用時の実行オプションを追記しました。
2017/9/21 ソースコードにライセンス表記を追加しました。
nasuka_o様
おそらくJava9に対応していないのが原因だと思います。
Java9には対応する予定ですがいつ頃になるかは未定です。
そのため、お急ぎでしたらJava8での実行をご検討ください。
竹内様
Java8にダウングレードして同期が成功いたしました!
迅速なコメント、誠にありがとうございます!助かりました。
御礼申し上げます
>おそらくJava9に対応していないのが原因だと思います。
>Java9には対応する予定ですがいつ頃になるかは未定です。
>そのため、お急ぎでしたらJava8での実行をご検討ください。
グループ週表示
PCを新しくして同じように設定した所、下記エラーが出てしまい動作しません。対処方法を教えてください。
◆コマンド
C:\Users\NSW00_003565>java -jar c:\GGsync\GGsync.jar c:\GGsync
◆エラーメッセージ
INFO 16:19:44 The sync beginning with debug mode.
DEBUG 16:19:44 グーグルカレンダーの認証方式: P12key
DEBUG 16:19:44 サービスアカウントのメールアドレス: cybozu@potaro-194303.iam.gser
viceaccount.com
DEBUG 16:19:44 サービスアカウントのP12キーファイルの絶対パス: C:/GGsync/potaro-0
cad61aad03b.p12
DEBUG 16:19:44 OAuth2のclient_idファイルの絶対パス:
DEBUG 16:19:44 OAuth2の認証情報保存先の絶対パス:
DEBUG 16:19:44 グーグルカレンダーID: kc77h91mh30iks3tf6736mdm50@group.calendar.g
oogle.com
DEBUG 16:19:44 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 16:19:44 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 16:19:44 ガルーンのURL: https://nswcb.bluespider.jp/cgi-bin/cbgrn/grn.cgi
DEBUG 16:19:44 ガルーンのアカウント: NSW00_003565
DEBUG 16:19:44 SYNC対象の開始時間: Sun Feb 04 16:19:44 JST 2018
DEBUG 16:19:44 SYNC対象の終了時間: Thu Jul 05 16:19:44 JST 2018
ERROR 16:19:44 No enum constant com.cybozu.GoogleCalendar.CredentialConfig.AuthT
ype.P12key
java.lang.IllegalArgumentException: No enum constant com.cybozu.GoogleCalendar.C
redentialConfig.AuthType.P12key
at java.lang.Enum.valueOf(Unknown Source)
PCを新しくして同じように設定した所、下記エラーが出てしまい動作しません。対処方法を教えてください。
◆コマンド
C:\Users\NSW00_003565>java -jar c:\GGsync\GGsync.jar c:\GGsync
◆エラーメッセージ
INFO 16:19:44 The sync beginning with debug mode.
DEBUG 16:19:44 グーグルカレンダーの認証方式: P12key
DEBUG 16:19:44 サービスアカウントのメールアドレス: cybozu@potaro-194303.iam.gser
viceaccount.com
DEBUG 16:19:44 サービスアカウントのP12キーファイルの絶対パス: C:/GGsync/potaro-0
cad61aad03b.p12
DEBUG 16:19:44 OAuth2のclient_idファイルの絶対パス:
DEBUG 16:19:44 OAuth2の認証情報保存先の絶対パス:
DEBUG 16:19:44 グーグルカレンダーID: kc77h91mh30iks3tf6736mdm50@group.calendar.g
oogle.com
DEBUG 16:19:44 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 16:19:44 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 16:19:44 ガルーンのURL: https://nswcb.bluespider.jp/cgi-bin/cbgrn/grn.cgi
DEBUG 16:19:44 ガルーンのアカウント: NSW00_003565
DEBUG 16:19:44 SYNC対象の開始時間: Sun Feb 04 16:19:44 JST 2018
DEBUG 16:19:44 SYNC対象の終了時間: Thu Jul 05 16:19:44 JST 2018
ERROR 16:19:44 No enum constant com.cybozu.GoogleCalendar.CredentialConfig.AuthT
ype.P12key
java.lang.IllegalArgumentException: No enum constant com.cybozu.GoogleCalendar.C
redentialConfig.AuthType.P12key
at java.lang.Enum.valueOf(Unknown Source)
Hirotaka Kanemaruさん
GGsync.propertiesの下記設定値がおそらく「P12key」になっています。
KEYも大文字にしてください。
google.oauth.type=P12KEY
竹内様
早々のご回答有り難うございます。
ご指摘の大文字変更した所、実行されたようですが、
別のエラーが出てしまいました。
ERROR 18:09:00 handshake alert: unrecognized_name
org.apache.axis2.AxisFault: handshake alert: unrecognized_name
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
Hirotaka Kanemaruさん
ガルーンサーバーのSSLに問題がありそうです。以下の対応をご検討ください。
・http://で試す
・グーグルで検索するとJavaのバージョンに関する記述もありました。
Javaのバージョンが1.7の場合は1.8へのバージョンアップをご検討ください。
Java 1.9では本プログラムは動作しませんのでご注意ください。
これでも発生するとなると解決は難しいです。
竹内様
HTTPで試しましたが、サーバー側で制限しておりだめでした。
色々とグーグル検索して試したところ、コマンドを下記にしたら正常動作しました。
「java -Djsse.enableSNIExtension=false -jar c:\GGsync\GGsync.jar c:\GGsync」
ありがとうございました。
竹内さま
実行すると、下記のようなエラーが出るのですがどんな原因が予想されますか?
DEBUG 17:23:22 SYNC対象の開始時間: Tue Feb 27 17:23:22 JST 2018
DEBUG 17:23:22 SYNC対象の終了時間: Sat Jul 28 17:23:22 JST 2018
DEBUG 17:23:26 [ADD] GaroonId:155581 Title:xxxxxx 様
ERROR 17:23:26 Connection reset
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
DEBUG 17:23:26 [ADD] GaroonId:155581 …と出ていることから
ガルーンからはデータをとれているような気がするのですが、
GGsync.propertiesのGoogle側の設定がおかしいのでしょうか?
ちなみに、PROXY使用で実行すると
DEBUG 17:23:26 [ADD]は出ずに org.apache.axis2.transport.http.HTTPSender sendViaPost
情報: Unable to sendViaPost to url
というエラーが出ます
wada様
Googleカレンダーへのアクセスにはプロキシ設定が必要で、ガルーンは不要という状況でしょうか。
であれば下記URLを参考にhttp.nonProxyHostsを活用してみてください。
https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html
未確認ですが、Garoonがhttp環境であればhttpsの方のみプロキシ設定すれば動作するかもしれません。
(Googleカレンダーはhttpsなので)
竹内さま
一旦別の環境で成功してから社内で再トライしようと思い、プライベートの端末で
VMWAREでCentos6.9をインストール&ガルーン4.6パッケージ版をインストールし
同梱のサンプルデータを使って、Googleカレンダーと連携のテストをしてみました。
P12KEYの設定では問題なく連携できたのですが、OAUTHを試そうとすると以下のエラーが出ます。
INFO 14:52:38 The sync beginning with debug mode.
DEBUG 14:52:38 グーグルカレンダーの認証方式: OAUTH2
DEBUG 14:52:38 サービスアカウントのメールアドレス:
DEBUG 14:52:38 サービスアカウントのP12キーファイルの絶対パス:
DEBUG 14:52:38 OAuth2のclient_idファイルの絶対パス: c:/ggsync/client_secret_xxx.apps.googleusercontent.com.json
DEBUG 14:52:38 OAuth2の認証情報保存先の絶対パス: c:/ggsync/
DEBUG 14:52:38 グーグルカレンダーID: xxx@gmail.com
DEBUG 14:52:38 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 14:52:38 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 14:52:38 ガルーンのURL: http://xxx/cgi-bin/cbgrn/grn.cgi
DEBUG 14:52:38 ガルーンのアカウント: sato
DEBUG 14:52:38 SYNC対象の開始時間: Mon Mar 19 14:52:38 JST 2018
DEBUG 14:52:38 SYNC対象の終了時間: Fri Aug 17 14:52:38 JST 2018
3 20, 2018 2:52:39 午後 com.google.api.client.util.store.FileDataStoreFactory se
tPermissionsToOwnerOnly
警告: unable to change permissions for everybody: C:\ggsync
3 20, 2018 2:52:39 午後 com.google.api.client.util.store.FileDataStoreFactory se
tPermissionsToOwnerOnly
警告: unable to change permissions for owner: C:\ggsync
Exception in thread "main" java.lang.NoClassDefFoundError: org/mortbay/jetty/Han
dler
at com.cybozu.GoogleCalendar.authorizeOAuth2(GoogleCalendar.java:260)
at com.cybozu.GoogleCalendar.authenticate(GoogleCalendar.java:202)
at com.cybozu.GoogleCalendar.<init>(GoogleCalendar.java:50)
at com.cybozu.GGsync.main(GGsync.java:157)
Caused by: java.lang.ClassNotFoundException: org.mortbay.jetty.Handler
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more
c:/ggsync/は、Everyoneユーザを追加してフルコントロール権限がついています。
また、OAuth2の認証情報保存先の絶対パスにStoredCredentialファイルが
できているので書き込み権限の問題なのかが?です。
どのあたりから原因を探したら良いでしょう?
wada様
OAUTHはJavaのバージョンが上がったからかClassNotFoundExceptionが出ますね・・・
(権限は警告なので動作しない直接的な要因ではありません)
そのため、P12KEYでの利用をご検討ください。
竹内様
いつもGoogleカレンダー連携大変重宝しております。ありがとうございます。
解説いただいている内容で1年以上問題なく動作していたのですが、数週間前より下記エラーとなり、動作しなくなってしましました。Javaの知識がまったくないため、お手上げ状態です。あつかましいお願いですが、どのようにすれば正常に動作するようになるかアドバイスいただけないでしょうか。
当方環境は、サイボウズガルーン 4.6.1(RedHat)、PC Windows10 Pro、Java 1.8._161 です。
※一部●で伏せ字にしております。
C:\GGsync>java -jar C:\GGsync\GGsync.jar C:\GGsync
INFO 21:34:48 The sync beginning with debug mode.
DEBUG 21:34:48 サービスアカウントのメールアドレス: ●●●●●●●●●@appspot.gserviceaccount.com
DEBUG 21:34:48 サービスアカウントのP12キーファイルの絶対パス: C:/GGsync/GGSync●●●●●●●.p12
DEBUG 21:34:48 グーグルカレンダーID: ●●●●●@●●●●.com
DEBUG 21:34:48 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 21:34:48 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 21:34:48 ガルーンのURL: http://garoon.●●●●●●●●●.jp/cgi-bin/cbgrn/grn.cgi
DEBUG 21:34:48 ガルーンのアカウント: ●●●●●●
DEBUG 21:34:48 SYNC対象の開始時間: Thu Mar 29 21:34:48 JST 2018
DEBUG 21:34:48 SYNC対象の終了時間: Mon Aug 27 21:34:48 JST 2018
ERROR 21:34:51 For input string: ""
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
C:\GGsync>
TI様
GGsync.jarを最新版に更新してください。(記事本文からダウンロードしてください)
削除されたユーザーが登録した予定を連携させられない不具合を2017年3月に改修しました。
おそらく直ると思います。が直らなければすいませんm(_ _)m
竹内様
ありがとうございます。
GGsync.jar最新版にすることで正常に動作するようになりました。
当方で初歩的な検証もできておらず申し訳ございませんでした。
これで安心して新年度業務を行えます。
本当にありがとうございました。
導入しようと試行錯誤しているのですが
文中の以下のコマンド実行時にエラーが発生します。
エラー文
GGsync (Is a directory)
java.io.FileNotFoundException: GGsync (Is a directory)
at java.base/java.io.FileInputStream.open0(Native Method)
フォルダ構成やファイルの置き場所を確認しましたが
それに関しては間違い無いと思います。
他にどんな原因が考えられるでしょうか?
よろしくお願いします。
Hiroki Teiさん
こちらの情報だけでは原因はわかりませんでした。
「C:/GGsync」ディレクトリに移動して、コマンド「dir」の実行結果を
教えていただければ原因がわかるかもしれません。
ご返信ありがとうございます。
当方macを使用しているため、lsコマンドで表示された
結果を示します。以下のような結果になりました。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
GGsync.db GGsync.log GGsync.properties
GGsync.jar GGsync.p12 GGsync.properties~
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ご確認いただければ幸いです。
パスの指定が間違っていそうです。
「C:/」というのはWindowsを想定しています。
コマンドの形式は「java -jar 実行ファイルのパス 設定ファイルが存在するフォルダ」です。
GGsync.jarなどを設置したフォルダはGGsync.jarが存在するフォルダ上でコマンド「pwd」で確認できます。
例えばその結果が「/home/hiroki」であれば実行コマンドは「java -jar /home/hiroki/GGsync.jar /home/hiroki」です。
GGsync.jarが含まれているフォルダでpwdコマンドを入力した結果です。
hiroki-tei$ pwd
=> /Users/hiroki-tei/GGsync
これを受けて次のコマンドを入力しました
java -jar /Users/hiroki-tei/GGsync/GGsync.jar /Users/hiroki-tei/GGsync
しかしながら次のようなエラーが表示されました。
INFO 10:00:49 The sync beginning with normal mode.
ERROR 10:00:50 GGsync (No such file or directory)
java.io.FileNotFoundException: GGsync (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method)
どうすればよいでしょうか?
すいません。回答遅れました。
プログラムは実行されるようになりましたが、その後エラーが発生していますね。
もしまだ調査中でしたら下記の情報を教えていただければ原因がわかるかもしれません。
・コマンド「ls -l」の結果
・GGsync.propertiesの最下部で「execution.level=1」に設定し、GGsync実行時のエラー出力
お世話になっております。
まず、ls -lの結果がこちらです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
GGsync hiroki-tei$ ls -l
total 34968
-rw-r--r-- 1 hiroki-tei UNIVERSUM\Domain Users 3072 4 23 13:24 GGsync.db
-rw-r--r--@ 1 hiroki-tei UNIVERSUM\Domain Users 17496321 4 23 10:50 GGsync.jar
-rw-r--r-- 1 hiroki-tei UNIVERSUM\Domain Users 41692 4 27 09:33 GGsync.log
-rw-r--r--@ 1 hiroki-tei UNIVERSUM\Domain Users 2476 4 23 10:16 GGsync.p12
-rw-r--r--@ 1 hiroki-tei UNIVERSUM\Domain Users 1832 4 23 15:19 GGsync.properties
-rw-r--r--@ 1 hiroki-tei UNIVERSUM\Domain Users 1817 4 23 13:50 GGsync.properties~
ーーーーーーーー「ls -l」の結果終わりーーーーーーーーーーーーーーーーーーーーーーーーー
次にpropertiesでデバッグモードを指定して実行した結果がこちらです。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
hiroki-tei$ java -jar /Users/hiroki-tei/GGsync/GGsync.jar /Users/hiroki-tei/GGsync
INFO 15:31:05 The sync beginning with debug mode.
DEBUG 15:31:05 グーグルカレンダーの認証方式: P12KEY
DEBUG 15:31:05 サービスアカウントのメールアドレス: ggsync@ggsync-202001
DEBUG 15:31:05 サービスアカウントのP12キーファイルの絶対パス: GGsync
DEBUG 15:31:05 OAuth2のclient_idファイルの絶対パス:
DEBUG 15:31:05 OAuth2の認証情報保存先の絶対パス:
DEBUG 15:31:05 グーグルカレンダーID: dtj6q9u308isv2uovjqlnjov50
DEBUG 15:31:05 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 15:31:05 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 15:31:05 ガルーンのURL: https://united.cybozu.com/g/
DEBUG 15:31:05 ガルーンのアカウント: hiroki-tei@united.jp
DEBUG 15:31:05 SYNC対象の開始時間: Tue May 01 15:31:05 JST 2018
DEBUG 15:31:05 SYNC対象の終了時間: Sat Sep 29 15:31:05 JST 2018
ERROR 15:31:05 GGsync (No such file or directory)
java.io.FileNotFoundException: GGsync (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method)
ーーーーーーーーー「デバッグモードでの表示」終わりーーーーーーーーーーーーーーー
お忙しいところ本当にありがとうございます。
よろしくお願いします。
お世話になります。
私がしばらく実行環境確認できないので推測ですが、、、
P12キーの指定(GGsync.propertiesファイル内のgoogle.oauth.p12key)を絶対パスで指定するようにしてください。
例)google.oauth.p12key=/Users/hiroki-tei/GGsync/GGsync.p12
あと、グーグルカレンダーIDは「@」以降も含めてください。
例)google.calendar.id=dtj6q9u308isv2uovjqlnjov50@group.calendar.google.com
ありがとうございます。
ご指摘いただいた部分、修正して再度実行してみたのですが
また別のエラーが吐き出されてしまいました。
以下に指摘点の該当部分に対応するDEBUG表示と
吐き出された警告文を記載しました。
INFO 14:57:29 The sync beginning with debug mode.
DEBUG 14:57:29 サービスアカウントのP12キーファイルの絶対パス: /Users/hiroki-tei/GGsync/GGsync.p12
DEBUG 14:57:29 グーグルカレンダーID: dtj6q9u308isv2uovjqlnjov50@group.calendar.google.com
5月 03, 2018 2:57:30 午後 org.apache.axiom.util.stax.dialect.StAXDialectDetector detectDialectFromJarManifest
警告: Unable to load manifest for StAX implementation at jrt:/java.xml/
Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
at org.apache.axiom.om.impl.builder.StAXBuilder.initParser(StAXBuilder.java:170)
at org.apache.axiom.om.impl.builder.StAXBuilder.<init>(StAXBuilder.java:138)
at org.apache.axiom.om.impl.builder.StAXBuilder.<init>(StAXBuilder.java:147)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.<init>(StAXOMBuilder.java:105)
at org.apache.axiom.om.impl.common.factory.AbstractOMMetaFactory.createOMBuilder(AbstractOMMetaFactory.java:168)
at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:161)
at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:141)
at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:112)
at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:590)
at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:575)
at org.apache.axis2.deployment.DescriptionBuilder.buildOM(DescriptionBuilder.java:97)
at org.apache.axis2.deployment.AxisConfigBuilder.populateConfig(AxisConfigBuilder.java:90)
at org.apache.axis2.deployment.DeploymentEngine.populateAxisConfiguration(DeploymentEngine.java:857)
at org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:116)
at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:64)
at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem(ConfigurationContextFactory.java:210)
at org.apache.axis2.client.ServiceClient.configureServiceClient(ServiceClient.java:151)
at org.apache.axis2.client.ServiceClient.<init>(ServiceClient.java:144)
at org.apache.axis2.client.ServiceClient.<init>(ServiceClient.java:251)
at com.cybozu.garoon3.common.CBServiceClient.<init>(CBServiceClient.java:65)
at com.cybozu.GGsync.main(GGsync.java:161)
Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 21 more
急ぎではないので、休み明けなどご都合よろしい時で大丈夫です。
次にすべきことを教えていただけたら嬉しいです。
よろしくお願いいたします。
ご確認ありがとうございます。
Javaのバージョンは9でしょうか。
本プログラムは現在Java8にしか対応していません。
Java8のインストールをご検討ください。
大変失礼しました。
最新版のJava10を入れていたようです。
改めて、Java8をインストールして
やり直したところ、正常に動作するようになりました。
当方、新卒社員でパソコンの扱いに慣れておらず
この度はお手を煩わせてしまい、内心気がひける思いでしたが
1から丁寧に対応していただき、本当に助かりました。
お休み中にも関わらず、誠にありがとうございました。
先輩や同期にも、このやり方を教えようと思います!
いつかまた竹内様のお知恵を拝借させていただく時が
あるかもしれませんが、その際は何卒よろしくお願いいたします。
竹内様
いつも大変便利に利用させていただいております。
恐縮ながら一点要望なのですが、「同期するスケジュールの除外機能」を実装いただけませんでしょうか。
例としましては「タイトルやメモ欄などに'##'が含まれる場合、google calendarに同期しない」といった機能です。
スマートフォンで、視認性を向上させたくお願い申し上げております。
お手すきの際に検討いただけましたら幸いです。
yabu様
ご要望ありがとうございます。
現時点ではご要望いただいた機能の実装予定はありませんが、今後の参考にさせていただきます。
※GitHubにソースを公開していますのでソースの改修で実現可能です
竹内様
シンク対象の日数を変更しようと[sync.before.days]パラメータを100から3650へ変えたところ、
以下エラーが発生しました。
ERROR 2018/06/27 13:30:59(GGsync:main:429) For input string: ""
こちらのページで既に回答済みの内容であったため、
最新のGGsync.properties及びGGsync.jarへ変更し再度実行したところ、
上記エラーではなく下記のようなエラーが発生して同期ができません、、
**************************************************************
ERROR 2018/06/27 14:01:23(GGsync:main:449) 400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Invalid JWT Signature."
}
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Invalid JWT Signature."
}
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.cybozu.GoogleCalendar.addSchedule(GoogleCalendar.java:81)
at com.cybozu.GGsync.main(GGsync.java:405)
**************************************************************
解決方法をご教示頂けないでしょうか??