tomcatでエラーが出てwarがデプロイできない [技術]
Macでtomcatのアプリがエラーで起動できなくなった。brewのtomcatが10.xになったのでいくつか修正して起動しようとしたら大惨事。
Stack Overflowの記事によれば、jarファイルが壊れているらしい。以下のコマンドで壊れているjarが見つかるので、warのビルド環境から削除する必要がある。
壊れたjarを参照しているソースコードはとりあえずコメント化するとか削除した。何かを実験していて放置していたらしいので(久しぶりなので忘れた)、特に実害なし。
org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/usr/local/Cellar/tomcat/10.0.5/libexec/webapps/app.war] を配備中のエラー
java.lang.IllegalStateException: 子要素を開始できません。
...
Caused by: java.util.zip.ZipException: zip END header not found
at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1585)
...
Stack Overflowの記事によれば、jarファイルが壊れているらしい。以下のコマンドで壊れているjarが見つかるので、warのビルド環境から削除する必要がある。
for j in $(find /path/to/lib -name '*.jar'); do jar -tvf $j > /dev/null 2>&1; [ "$?" -ne 0 ] && echo "$j jar is broken"; done
どうやらMavenがダウンロードしたファイルがそもそも壊れているか、今の環境では開けないようだ。壊れたjarを参照しているソースコードはとりあえずコメント化するとか削除した。何かを実験していて放置していたらしいので(久しぶりなので忘れた)、特に実害なし。
MacOSのシェルスクリプトで通知を表示する方法 [技術]
Macで時間がかかるシェルスクリプトが終了した時に通知を表示して音も鳴らすには、osascriptコマンドが利用できる。
最後のGlassは/System/Library/Sounds/ディレクトリにあるファイルを指定する。
Linuxでも実行するシェルスクリプトの場合はOS判定すれば良い。以下はBashの場合。
通知が表示されない場合は、システム環境設定の「通知と集中モード」で「スクリプトエディタ」の通知を許可すること。
osascript -e 'display notification "18ファイルをダウンロードしました。" with title "download.sh" sound name "Glass"'
このようなコマンドをスクリプトの最後で実行すると、完了時に画面右上に次のような通知が表示される。最後のGlassは/System/Library/Sounds/ディレクトリにあるファイルを指定する。
% ls /System/Library/Sounds/
Basso.aiff Bottle.aiff Funk.aiff Hero.aiff Ping.aiff Purr.aiff Submarine.aiff
Blow.aiff Frog.aiff Glass.aiff Morse.aiff Pop.aiff Sosumi.aiff Tink.aiff
Linuxでも実行するシェルスクリプトの場合はOS判定すれば良い。以下はBashの場合。
if [[ "$OSTYPE" == "darwin"* ]]; then
osascript -e ...
fi
通知が表示されない場合は、システム環境設定の「通知と集中モード」で「スクリプトエディタ」の通知を許可すること。