Windows 上的 Jetty 小工具
做項(xiàng)目經(jīng)常遇到需要開(kāi)發(fā)Java應(yīng)用,我喜歡用Jetty進(jìn)行開(kāi)發(fā)、部署,主要是由于Jetty的輕量級(jí)。
Jetty 項(xiàng)目主頁(yè):http://www.eclipse.org/jetty/, 最新版9.30剛剛添加對(duì) HTTP/2的支持。
但是Jetty在Windows下部署不是很方便,需要用命令行。
每次都要使用命令行,很是麻煩,于是我打算做一個(gè)Jetty的小工具,把命令行操作封裝一下,可以在GUI中啟動(dòng)、停止Jetty,可以配置常用參數(shù)等。
完成之后的界面如下:

編譯好的可執(zhí)行文件:
JettyMonitor-v0.1-alpha-x64.7z JettyMonitor-v0.1-alpha-x86.7z
注意需要安裝.NET Framework 4.5.2:

開(kāi)發(fā)人員安裝Dev Pack:http://www.microsoft.com/en-us/download/details.aspx?id=42637
最終用戶安裝運(yùn)行時(shí):http://www.microsoft.com/en-us/download/details.aspx?id=42642
Java Home :經(jīng)常做Java開(kāi)發(fā)的朋友一看就知道是JDK的目錄。
這些目錄在點(diǎn)擊保存配置后保存在配置文件里:

第一次運(yùn)行時(shí)還可以從環(huán)境變量中查找:

EnvironmentUtil 是一個(gè)環(huán)境變量幫助類,便于對(duì)環(huán)境變量進(jìn)行各種操作,具體細(xì)節(jié)請(qǐng)參見(jiàn)源碼。
Jetty Home:指解壓縮后的Jetty目錄:

那么Jetty Base 是什么呢?官方文檔上有介紹:http://www.eclipse.org/jetty/documentation/current/quickstart-running-jetty.html
A jetty base allows the configuration and web applications of a server instance to be stored separately from the jetty distribution, so that upgrades can be done with minimal disruption.
即Jetty Base 目錄是一個(gè)應(yīng)用的單獨(dú)存儲(chǔ)目錄,可以與Jetty Home主目錄的配置不相同。這樣帶來(lái)了一個(gè)顯著的好處,以后升級(jí)Jetty版本時(shí)對(duì)原有應(yīng)用的影響很小。
Jetty Base 是Jetty 9.1版本才引入的,非常新。
Jetty 的官方部署建議是新建立一個(gè)Jetty Base部署,而不是把war包等直接放到Jetty Home主目錄的webapps目錄中。
本地端口是Jetty的Web端口,默認(rèn)是8080,。遠(yuǎn)程端口是遠(yuǎn)程調(diào)試用的,可以不開(kāi)啟。
常規(guī)運(yùn)行的命令是:java -jar start.jar jetty.http.port=8080
借助JVM進(jìn)行遠(yuǎn)程調(diào)試的命令是:java -Xdebug -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n -jar start.jar jetty.http.port=8080
我們來(lái)整理一下Jetty部署的步驟:
1、選擇一個(gè)目錄Jetty Base目錄中,進(jìn)入該目錄。
2、初始化Jetty Base目錄:java -jar %JETTY_HOME%/start.jar --add-to-startd=http,deploy
--add-to-startd 參數(shù)負(fù)責(zé)初始化需要的Jetty模塊,Jetty有很多模塊,位于:%JETTY_HOME%/modules

根據(jù)需要進(jìn)行添加,我是用Spring MVC開(kāi)發(fā)的,添加了這些模塊:--add-to-startd=http,deploy,spring,servlet,servlets,webapp,jsp,jstl,server
除了--add-to-startd命令,Jetty還有很多命令,可以輸入:java –jar start.jar –help 查看:

初始化完成后Jetty Base目錄下生成兩個(gè)目錄:

其中start.d保存模塊的配置文件:

webapps用來(lái)放置發(fā)布的war包等:

3、運(yùn)行java –jar start.jar啟動(dòng)Jetty
我把這三個(gè)步驟整合到一個(gè)批處理中,便于用程序處理:
cd /d "D:\Publish\JettyBase"
"C:\Program Files\Java\JDK8\bin\java.exe" -jar "D:\Developer\Server\Application\Jetty\Jetty9\start.jar" --add-to-startd=http,deploy,spring,servlet,servlets,webapp,jsp,jstl,server
"C:\Program Files\Java\JDK8\bin\java.exe" -Xdebug -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n -jar "D:\Developer\Server\Application\Jetty\Jetty9\start.jar" jetty.http.port=8080
啟動(dòng)Jetty時(shí)使用Process執(zhí)行批處理:

注意要啟用重定向標(biāo)準(zhǔn)輸出與標(biāo)準(zhǔn)錯(cuò)誤,才能獲取到批處理的執(zhí)行結(jié)果:

啟動(dòng)成功:

打開(kāi)瀏覽器測(cè)試一下:

在IDE中可以很方便的設(shè)置遠(yuǎn)程調(diào)試:

可以直接在配置命令行中編輯批處理的內(nèi)容,編輯完后保存:

配置文件保存在小工具同一目錄中:


停止Jetty時(shí)需要注意,因?yàn)槲覀兪褂肞rocess執(zhí)行批處理啟動(dòng)的Jetty,即用cmd.exe 啟動(dòng)了Jetty的Java進(jìn)程,Java進(jìn)程作為cmd的子進(jìn)程駐留,不能直接用process.Close()關(guān)閉。
這里我們?cè)儆肞rocess執(zhí)行dos命令來(lái)殺掉所有的Jetty進(jìn)程:TASKKILL /F /PID xxx /T
/F 是強(qiáng)制殺掉,/PID 指定進(jìn)程ID, /T 是殺掉所有子進(jìn)程:

因此這樣來(lái)停止Jetty:

執(zhí)行結(jié)果:

小結(jié):
這樣,我們就可以不用在純命令行界面中操作了,而且配置可以保存、自定義,可以查看啟動(dòng)、停止日志等。
修改一下配置也可以適用于其他Java服務(wù)器。

浙公網(wǎng)安備 33010602011771號(hào)