別チームの人がWicketで作成したWebアプリをサーバに乗せてくれと頼まれたので、
「デプロイするだけでOKならいいですよー」と安請け合いしたら、以下を知らなくて意外とハマった
開発者から受け取ったもの
- ソースコード一式
- build.gradle
曰く、gardleでwar作れるようになってるので、作ったwar置けばOK!
早速言われたとおりに、gradle war
を実行し、出来上がったwarファイルをWebサーバに配備
MarkupNotFoundException
配備したアプリにアクセスすると以下のエラーが発生
ERROR org.apache.wicket.RequestCycle - unexpected exception when handling another exception: Markup of type 'html' for component 'com.xxx.HomePage' not found. Enable debug messages for org.apache.wicket.util.resource to get a list of all filenames tried.: [Page class = com.xxx.HomePage, id = 1, version = 0]
どうやら「HTMLファイルがないよ」的なことをいっている。
サーバに配備されたアプリの、WEB-INF配下を見てみると確かにHTMLファイルが見当たらない
$ ll ${APP_HOME}/WEB-INF/classes/com/xxx/
合計 48
-rw-r--r-- 1 root root 1377 12月 13 14:45 2018 BasePage.class
-rw-r--r-- 1 root root 415 12月 13 14:45 2018 ErrorPage.class
-rw-r--r-- 1 root root 420 12月 13 14:45 2018 HomePage.class
-rw-r--r-- 1 root root 2703 12月 13 14:45 2018 WicketApplication.class
drwxr-xr-x 2 root root 4096 12月 13 14:56 2018 commons
drwxr-xr-x 2 root root 4096 12月 13 14:56 2018 dao
drwxr-xr-x 2 root root 4096 12月 13 14:56 2018 info
drwxr-xr-x 3 root root 4096 12月 13 14:56 2018 tools
受け取ったソースコード一式の中には、HTMLファイルは存在している模様
src
└─main
└─java
└─com
└─xxx
│ commons
│ dao
│ info
│ tools
│ BasePage.html
│ BasePage.java
│ ErrorPage.html
│ ErrorPage.java
│ HomePage.html
│ HomePage.java
└─WicketApplication.java
原因
- HTMLファイルが
src/main/java
配下に入っているのがダメ- Gradleの規約に沿っていないため、war作成時に含まれなかった
- 以下のようなディレクトリ構成に変更することで解決
src
└─main
│─java
│ └─com
│ └─xxx
│ │ commons
│ │ dao
│ │ info
│ │ tools
│ │ BasePage.java
│ │ ErrorPage.java
│ │ HomePage.java
│ └─WicketApplication.java
└─resources
└─com
└─xxx
│ BasePage.html
│ ErrorPage.html
└─HomePage.html
まとめ
成果物は誰かに渡す前に動作確認すること!