maven+tomcat如何自動編譯部署到伺服器
首先,這個資源在網上有很多,講的也很全,今天寫這篇文章主要是記錄今天在部署時候遇到的細節問題,希望能對大家有幫助。
先說下自動編譯的好處,總不可能每次開發都手動打包到伺服器,再上傳吧,也是因為最近專案原因,今天才設定這個熱部署。
使用maven+tomcat是自動編譯部署的一種方式,其他方式我想接下來應該也會使用,那就是使用Jenkins.兩種方式對比,有經驗的開發者可能會比較瞭解,沒經驗的我在這邊稍微說下。
假設我現在使用的是maven+tomcat是自動編譯部署,那我部署的方式則是通過maven命令執行命令進行操作,可能每次專案如果我是專案管理者我需要每次先update我的project,然後再執行maven命令把生成的war包自動部署到伺服器。那使用Jenkins呢?
Jenkins則是在上面的基礎上做提升,可以使用maven+git、svn+tomcat進行操作,大概流程是開發者把code上傳到git、svn,使用Jenkins幫你進行上面的maven命令操作,可以設定Jenkins每分鐘進行輪詢,如果開發者有上傳程式碼,則自動進行打包,這樣是不是節省了我們手動打包,手動部署,手動執行maven操作步驟呢???好了,現在先說下maven+tomcat是自動編譯部署操作步驟和我今天遇到的問題吧!
非常簡單,按照以下步驟走就可以。
一:在maven專案新增外掛
<bulid>
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration>
<url>http://127.0.0.1:8080/manager/text</url> <!--這邊以本地路徑為例,如果是遠端伺服器則該對應的ip即可--> <server>tomcat-maven</server><path>/shop</path> <charset>utf8</charset> <update>true</update> </configuration> </plugin>
</build>
備註:
1:以上的外掛不是唯一的,還有別的外掛可以進行操作,如果是第一次使用,可以先使用我使用的版本
2:url格式:tomcat6不需要/text,tomat7,8都需要
configuration引數是幹嘛的呢?
1:server名稱是待會需要在本地maven配置的,這兩個名稱需要一致
2:path就是你生成的訪問路徑,如果是本人上面寫的,則訪問路徑是這樣的http://127.0.0.1:8080/shop就可以訪問了
二:在本地maven配置檔案設定要訪問的tomcat管理員
在setting.xml新增引數
<servers>
<server>
<id>tomcat-maven</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
備註:上面的id就是在pom設定的server名稱,兩個需要一致
這邊的username和password是tomcat的,需要我們設定tomcat許可權
三:在tomcat-users.xml設定
把以下引數放到<tomcat-user>體
<role rolename="tomcat"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script" />
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="tomcat,manager,manager-script,admin-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />
這邊配置的admin以及操作許可權。
以上是我操作的步驟,網上有一些說還需要配置tomcat的訪問ip,大家可以參考下
將 /apache-tomcat-8.5.4/webapps/manager/META-INF/context.xml中的,ip限制去掉
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> </Context>
好了,接下來準備執行命令進行測試
如果是idea開發工具可以這樣做,在右上角tomcat配置的地方開啟,edit configuration,+選擇maven
working-directory選擇專案路徑即可
commad-line:
//第一次 tomcat7:deploy //之後 tomcat7:redeploy
mvn package -Pdevelop -Dmaven.skip.test=true tomcat7:deploy
-Dmaven.skip.test=true:是跳過測試
注:開始執行命令時候tomcat是需要開啟的,不然會報錯。
總結:一開始是在本地做測試,很快就成功並且能夠訪問。後來要部署到伺服器的時候就可以種報錯。
首先,伺服器的tomcat一樣需要上面的操作。我這邊報錯的有
這樣的
Cannot invoke Tomcat manager: Connection reset by peer: socket write error -
網上也是各種找,但是都不行。
後來找到了,首先伺服器的tomcat是別人搭建的,tomcat的目錄結構被修改,webapp下的manager資料夾和ROOT都不在了,所以出現了這種問題。當然可能有別的原因,後來把manager和ROOT加上去就可以了。希望對遇到問題的朋友有幫助。