使用tomcat7插件將項(xiàng)目一鍵部署到遠(yuǎn)程tomcat服務(wù)器-熱部署

版權(quán)聲明:本文來自 Crocutax 的博客 , 轉(zhuǎn)載請(qǐng)注明出處 http://www.crocutax.com

現(xiàn)在用maven管理J2EE項(xiàng)目應(yīng)該是常態(tài)了挟炬,在開發(fā)階段我們經(jīng)常需要經(jīng)歷反復(fù)的"修改代碼->部署->測(cè)試"過程漠秋。如果每次修改完代碼巫玻,都通過maven先clean->package忍些,再手動(dòng)到輸出目錄把打好的war包c(diǎn)opy到tomcat的webapps下蒋情,多次的重復(fù)這種無意義的體力活會(huì)讓人煩躁,而且顯得沒有程序員精神狭归。

不得不說枫夺,有些時(shí)候“懶”還是有很多正面意義的。這篇文章就是介紹下如何通過tomcat7插件將項(xiàng)目一鍵部署到tomcat服務(wù)器的webapps目錄下雏婶。命令很簡單物赶,主要是環(huán)境配置,以及踩坑記錄留晚。

實(shí)現(xiàn)tomcat熱部署用到了:

  • maven (項(xiàng)目構(gòu)建和依賴管理)
  • tomcat7插件 (部署到tomcat的插件)
  • tomcat服務(wù)器 (web服務(wù)器)

1.添加tomcat用戶及權(quán)限

由于涉及到tomcat的自動(dòng)部署酵紫,所以需要具備tomcat的管理權(quán)限,而普通的tomcat用戶是沒有管理權(quán)限的,比如通過{TOMCAT_HOME}/bin/startup.bat啟動(dòng)tomcat之后错维,在首頁右側(cè)的Manager App中奖地,需要先輸入管理員賬戶和密碼才能進(jìn)行項(xiàng)目服務(wù)器上項(xiàng)目的管理,否則根本無法進(jìn)入管理頁面需五。

添加用戶和權(quán)限也很簡單鹉动,在{TOMCAT_HOME}/conf/tomcat-users.xml 文件中轧坎,</tomcat-users>節(jié)點(diǎn)下添加如下內(nèi)容,創(chuàng)建管理角色和用戶,并授權(quán)用戶管理角色:

<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/>

之后進(jìn)入tomcat首頁->Manager App測(cè)試管理員賬號(hào)是否創(chuàng)建成功

注:

  • username和password可以自定義宏邮,這里為了簡單記憶使用了tomcat同時(shí)作為用戶名和密碼。
  • 網(wǎng)上有的博客這里配置了大量的權(quán)限缸血,但是目前并沒有發(fā)現(xiàn)其在這個(gè)階段的作用和意義蜜氨。

2.配置tomcat允許遠(yuǎn)程訪問

默認(rèn)tomcat只允許本地部署,如果是要部署到遠(yuǎn)程服務(wù)器上捎泻,那么需要在遠(yuǎn)程服務(wù)器的{TOMCAT_HOME}conf/Catalina/localhost/目錄下創(chuàng)建一個(gè)manager.xml文件飒炎,配置如下內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager">
         <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

如果只想允許部分IP擁有訪問權(quán)限,那么可以配置allow節(jié)點(diǎn)笆豁,比如

allow="127.0.0.1,192.168.1.*"

代表只允許主機(jī)擁有訪問權(quán)限郎汪。

注意:

如果沒有這一步的配置,本地tomcat服務(wù)器部署正常闯狱,但是遠(yuǎn)程tomcat服務(wù)器會(huì)報(bào)出下方常見問題中提到的Cannot invoke Tomcat manager: Connection reset by peer: socket write error異常

3.為maven添加tomcat管理員賬號(hào)

由于需要使用maven來構(gòu)建和部署項(xiàng)目煞赢,所以maven就需要擁有tomcat的管理員賬號(hào)信息。
{MAVEN_HOME}/conf/settings.xml文件中<servers>節(jié)點(diǎn)下添加如下內(nèi)容:

<!-- 配置可以操作tomcat的用戶名和密碼 -->
<server>
    <id>crocutax</id>
    <!-- server login name -->
    <username>tomcat</username>
    <!-- server login password -->
    <password>tomcat</password>
</server>

4.配置tomcat7插件

在項(xiàng)目的pom.xml中配置tomcat7 plugin哄孤,具體節(jié)點(diǎn)的意義看注釋或下方清單

<!-- 配置Tomcat插件 -->
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>

    <configuration>
        <!-- 此處的名字必須和{MAVEN_HOME}/conf/settings.xml中配置的server節(jié)點(diǎn)的id一致-->
        <server>crocutax</server>
        <!--服務(wù)器端口號(hào)-->
        <port>8080</port>
        <!-- 項(xiàng)目發(fā)布的路徑,默認(rèn)就是tomcat/webapps目錄,可以指定深層次目錄,留"/",則默認(rèn)在webapps目錄下部署ROOT.war包-->
        <path></path>
        <!-- 注意tomcat7此處的url照筑,不能隨意修改,后綴必須是text,不能是html. 如果是本地tomcat部署,用localhost和ip都可以 -->
        <url>http://localhost:8080/manager/text</url>
        <!--<url>http://117.62.110.110:8080/manager/text</url>-->
        <!--解決中文參數(shù)亂碼問題-->
        <uriEncoding>UTF-8</uriEncoding>
        <update>true</update>
        <!--配置在tomcat\conf\tomcat-users.xml中定義的用戶名-->
        <username>tomcat</username>
        <password>tomcat</password>
    </configuration>
</plugin>

節(jié)點(diǎn)清單

  • server : 名字必須和{MAVEN_HOME}/conf/settings.xml中配置的server節(jié)點(diǎn)的id一致
  • port : 服務(wù)器端口號(hào)
  • path :項(xiàng)目發(fā)布的路徑,默認(rèn)就是tomcat/webapps目錄,可以指定深層次目錄,留"/",則默認(rèn)在webapps目錄下部署ROOT.war包
  • url : 注意tomcat7此處的url,不能隨意修改,后綴必須是text,不能是html. 如果是本地tomcat部署,用localhost和ip都可以
  • uriEncoding :解決中文參數(shù)亂碼問題
  • update : 熱部署,否則后期會(huì)報(bào)錯(cuò)
  • username :配置{TOMCAT_HOME}\conf\tomcat-users.xml中定義的用戶名
  • password :同上

5.啟動(dòng)tomcat服務(wù)器

先通過{TOMCAT_HOME}/bin/startup.bat啟動(dòng)tomcat凝危,啟動(dòng)完畢之后再進(jìn)行部署波俄,否則會(huì)報(bào)出如下異常

Cannot invoke Tomcat manager: Connection refused: connect -> [H
elp 1]

6.maven命令部署

在IDE->Terminal 或 項(xiàng)目根目錄打開dos窗口,輸入maven命令

  • mvn clean package tomcat:deploy (使用的是插件1.1版本蛾默,如果pom.xml中配置的是2.2版本懦铺,那么使用這么命令會(huì)報(bào)錯(cuò))
  • mvn clean package tomcat7:deploy (使用的是插件2.2版本,自己用的這個(gè))

然后看著命令行歇一會(huì)吧

...
[INFO] --- maven-war-plugin:2.2:war (default-war) @ cmw ---
[INFO] Packaging webapp
[INFO] Assembling webapp [cmw] in [D:\code\server\chinesemedicine\target\cmw]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\code\server\chinesemedicine\src\main\webapp]
[INFO] Webapp assembled in [887 msecs]
[INFO] Building war: D:\code\server\chinesemedicine\target\cmw.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO]
[INFO] <<< tomcat7-maven-plugin:2.2:deploy (default-cli) < package @ cmw <<<
[INFO]
[INFO]
[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ cmw ---
[INFO] Deploying war to http://localhost:8080/cmw
Uploading: http://localhost:8080/manager/text/deploy?path=%2Fcmw&update=true
Uploaded: http://localhost:8080/manager/text/deploy?path=%2Fcmw&update=true (45960 KB at 40564.5 KB/sec)

[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Deployed application at context path /cmw
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.075 s
[INFO] Finished at: 2017-09-17T11:31:21+08:00
[INFO] Final Memory: 20M/293M
[INFO] ------------------------------------------------------------------------

出現(xiàn) BUILD SUCCESS支鸡,就部署成功了阀趴!

常見的部署命令,在Tomcat7 Plugin Documentation 中有詳細(xì)介紹苍匆,這里羅列幾個(gè)常用的:

  • tomcat7:run 運(yùn)行當(dāng)前項(xiàng)目
  • tomcat7:deploy 部署當(dāng)前項(xiàng)目
  • tomcat7:redeploy 重新部署項(xiàng)目
  • tomcat7:undeploy 取消部署當(dāng)前項(xiàng)目

常見問題

Tomcat return http status error: 401, Reason Phrase: Unauthorized

未授權(quán)訪問tomcat刘急,即沒有tomcat的管理權(quán)限,如果沒有進(jìn)行步驟1中的"添加tomcat用戶及權(quán)限"操作,遠(yuǎn)程部署時(shí)就會(huì)報(bào)此異常浸踩。

還有一種情況叔汁,已經(jīng)在conf/tomcat-users.xml中配置了用戶和權(quán)限

<!-- 創(chuàng)建用戶,并授權(quán) -->
<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/>

但是還是有這個(gè)異常信息,于是在服務(wù)器tomcat首頁測(cè)試Manager App检碗,發(fā)現(xiàn)定義的tomcat管理員角色無法正常登陸据块。這說明配置的用戶和角色出問題了,繼續(xù)排查,在tomcat啟動(dòng)日志中,發(fā)現(xiàn)了如下異常信息:

警告: Unexpected exception resolving reference
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字節(jié)的 UTF-8 序列的字節(jié) 1 無效折剃。

于是懷疑是有中文字符造成的影響另假,刪掉了在tomcat-users.xml中的中文注釋,即

<!-- 創(chuàng)建用戶,并授權(quán) -->

再次部署,tomcat Manager App 測(cè)試成功,遠(yuǎn)程一鍵部署成功!

注:

雖然這里是WARN而不是ERROR,但是還是有可能造成一些內(nèi)部程序的加載失敗導(dǎo)致功能缺失怕犁,比如這里的tomcat啟動(dòng)成功边篮,但是內(nèi)部管理權(quán)限卻配置失敗,進(jìn)而導(dǎo)致遠(yuǎn)程部署因沒有權(quán)限而失敗奏甫。所以戈轿,從嚴(yán)謹(jǐn)性角度出發(fā),如果精力足夠阵子,那么所有的WARN都不容忽視思杯。

Connection reset by peer: socket write error

異常信息:[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) on project cmw: Cannot invoke Tomcat manager: Connection reset by peer: socke
t write error -> [Help 1]

這個(gè)應(yīng)該是部署的時(shí)候最容易出現(xiàn)的異常了,在這里卡了很久挠进。網(wǎng)上查了一大圈色乾。根本原因是:當(dāng)客戶端發(fā)出請(qǐng)求(request)后,如果還沒有完全獲得服務(wù)端的響應(yīng)(response)领突,客戶端與服務(wù)器段的連接斷開(例如斷網(wǎng)暖璧、按了“停止”按鈕、或者客戶端瀏覽器關(guān)閉等)攘须,服務(wù)器端就會(huì)拋出此Exception漆撞。

這個(gè)問題需要從多方面排查殴泰。

1.如果是遠(yuǎn)程服務(wù)器,需要配置tomcat允許遠(yuǎn)程訪問浮驳,見步驟2

2.有的說tomcat9在步驟1中配置用戶權(quán)限時(shí)悍汛,同一個(gè)用戶不能同時(shí)擁有manager-guimanager-script權(quán)限,但是我分開了之后至会,依然沒有解決這個(gè)問題离咐。最終放棄使用tomcat9,使用tomcat7奉件,一切正常了宵蛀。

3.如果tomcat上已經(jīng)部署了該項(xiàng)目,那么需要使用redeploy命令县貌,即mvn tomcat7:redeploy

部署后的項(xiàng)目404

以下3種原因都有可能造成部署后的項(xiàng)目無法正常訪問术陶,報(bào)404:

  1. 如果是遠(yuǎn)程服務(wù)器,請(qǐng)確保8080端口已經(jīng)添加到入網(wǎng)規(guī)則中
  2. pom.xml中tomcat7插件的path節(jié)點(diǎn)配置的有問題
  3. 項(xiàng)目本身404

tomcat內(nèi)存泄漏

tomcat日志中報(bào)出

The web application [/appStore] appears to have started a thread named [Thread-2],but has failed to stop it ,this is very likely to create a memory leak

等有時(shí)間了再研究煤痕,http://www.cnblogs.com/xyb930826/p/5725340.html 中有提到

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梧宫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子摆碉,更是在濱河造成了極大的恐慌塘匣,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷帝,死亡現(xiàn)場(chǎng)離奇詭異忌卤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)楞泼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門驰徊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人现拒,你說我怎么就攤上這事辣垒。” “怎么了印蔬?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脱衙。 經(jīng)常有香客問我侥猬,道長,這世上最難降的妖魔是什么捐韩? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任退唠,我火速辦了婚禮,結(jié)果婚禮上荤胁,老公的妹妹穿的比我還像新娘瞧预。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布垢油。 她就那樣靜靜地躺著盆驹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滩愁。 梳的紋絲不亂的頭發(fā)上躯喇,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音硝枉,去河邊找鬼廉丽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妻味,可吹牛的內(nèi)容都是我干的正压。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼责球,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蔑匣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棕诵,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤裁良,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后校套,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體价脾,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年笛匙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侨把。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妹孙,死狀恐怖秋柄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蠢正,我是刑警寧澤骇笔,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站嚣崭,受9級(jí)特大地震影響笨触,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雹舀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一芦劣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧说榆,春花似錦虚吟、人聲如沸寸认。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偏塞。三九已至,卻和暖如春模庐,著一層夾襖步出監(jiān)牢的瞬間烛愧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工掂碱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怜姿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓疼燥,卻偏偏與公主長得像沧卢,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子醉者,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理但狭,服務(wù)發(fā)現(xiàn),斷路器撬即,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 將項(xiàng)目布署到遠(yuǎn)程Tomcat方式一上述創(chuàng)建項(xiàng)目立磁,可以看出是在本地進(jìn)行執(zhí)行的肢专,也就是進(jìn)行編譯后執(zhí)行的Tomcat是何...
    IT分享匯閱讀 949評(píng)論 0 2
  • 我jdk版本是1.7.0_95佑吝,在網(wǎng)上查了一下1.7屬于java7maven3.3+版本都支持java7,所以我使...
    liangxifeng833閱讀 1,266評(píng)論 0 2
  • 麗蕓是我在健身房認(rèn)識(shí)的健身達(dá)人,面容姣好球及,身材凹凸有致粒竖。矮窮矬的我當(dāng)時(shí)也是懷著對(duì)美麗的無限向往颅崩,一個(gè)激動(dòng)就不知天高...
    文煒閱讀 522評(píng)論 0 0