Raspberry Pi, Eclipse 3.8 與 Tomcat 8.5

一個很尷尬的處境:

因為專案需求需要在Raspberry Pi 上建立類似IoT Gateway 的Software,但懶得自行寫多線續的Server的情形下,可以直接和Java 掛勾的Tomcat Web Server 就成了不錯的選擇。而當滿心歡喜地安裝Raspbian 自己套件庫中的Java, Eclipse 和Tomcat 時,出現了一個尷尬的處境....

Java 是 1.8版,Tomcat 是8.5版,Eclipse 是 3.8.1版
那問題是什麼呢 ?
Java, Tomcat 與 Eclipse 之間是有版本的微妙關係的...
Eclipse 3.8.1 可以支援 Java 8,但是Tomcat 8.5 沒辦法支援:

既然這樣安裝Tomcat 7不就得了嗎 ? 答案是... Tomcat 的版本也要跟Java 配合...

真的只能大家要8不然就都7...

怎麼辦 ? 有很多作法:
1. 降級Java 到7,安裝Tomcat 7
很可惜Java 7 已經很難下載的到ARM版本了... 而Tomcat 因為是Architecture Independent 所以好解決
2. 升級Eclipse......
我翻遍了網路,找不到預先編譯好的ARM版本...

真OX的,明明就是Eclipse 的問題!

然而StackOverflow 上似乎有個解套... 去拿下一個版本的JST Plugin 來用[1]
如果靜下來想想... 也不是不可行
如果Eclipse 3.8.1 可以在Java 8 上執行,那給下一版的Plugin應該不至於差異大到不能執行,所以就.. 死馬當活馬醫了...

Eclipse Luna WebTools Repository: http://download.eclipse.org/webtools/repository/neon
開啟Install New Software,輸入網址:

*個人的經驗是不裝UI,考量是新版UI可能會無法與舊版Eclipse Hook-Up,我們只缺的是Adapters 與 Extensions。當然您仍可以試試。

看起來似乎是沒有什麼問題

重新加入Server,有出現Tomcat 8.5 的選項了

新增Server看起來是沒收到軟體的Complaint了

Server 正常啟動了:




備註: 如果您是第一次安裝Tomcat 8.5 在Raspbain 上,您可能會在啟動Tomcat 時看到這個:

我是這樣解決的 (但不確定是否為正確方法):

開始前請注意: # 代表root權限下執行的,$代表一般使用者權限

1. Debian 9 套件庫中Tomcat 8.5 安裝的十分奇怪,程式檔案置放為/usr/share/tomcat8,但是設定、日誌與政策設定等卻是放在/var/lib/tomcat8,若去網站下載的tomcat8通常會將這些檔案與資料夾置放在同一個目錄中,故這會導致Eclipse 找不到這些檔案:
# cd /usr/share/tomcat8
# ln -s /var/lib/tomcat8/conf conf
# ln -s /var/lib/tomcat8/lib lib
# ln -s /var/lib/tomcat8/logs logs
# ln -s /var/lib/tomcat8/work work
# ln -s /var/lib/tomcat8/policy policy
# ln -s /var/lib/tomcat8/webapps webapps
# ln -s /var/lib/tomcat8/policy/catalina.policy ./conf/catalina.policy

設定權限,讓Eclipse 能夠修改conf 目錄:
# chown -R root.pi /etc/tomcat8
# chmod -R 775 /etc/tomcat8
# chown root.pi /var/lib/tomcat8/policy/catalina.poliy
# chmod 775 /var/lib/tomcat8/policy/catalina.policy

2. 移除Eclipse 的Tomcat Preference (否則Server 會無法再新增)
先刪除Eclipse 的Servers 中的設定 (您可以在Window->Show View-> Other 裡面找到)


刪除Eclipse 的Tomcat Preference (如果您碰到無法再新增Server 時才需要 A nasty Eclipse bug) [2]:
$ cd /home/pi/workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings/
請注意: 如果您將workspace 置放在不同的地方,請自行更改/.metadata 之前的位置
$ rm org.eclipse.wst.server.core.prefs
$ rm org.eclipse.jst.server.tomcat.core.prefs

重新啟動Eclipse 再新增Tomcat 8.5即可

3. Tomcat 會隨Raspbian 開機啟動,Eclipse 會因此無法再啟動Tomcat 時:
一次性的:
# systemctl stop tomcat8
永久性的 (不隨開機啟動):
# systemctl stop tomcat8
# /lib/systemd/systemd-sysv-install disable tomcat8
由於Tomcat8 不算是原生的Service 程式,而是依賴sysv-install 在背景常駐執行而已,故不是使用systemctl disable...

參考資料:

留言

熱門文章