1. 程式人生 > >maven+tomcat如何自動編譯部署到伺服器

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加上去就可以了。希望對遇到問題的朋友有幫助。