1. 程式人生 > >maven+idea 自動部署專案到linux伺服器及遇到的一些問題

maven+idea 自動部署專案到linux伺服器及遇到的一些問題

一、環境

本教程使用的環境如下
1. idea 2017
2. tomcat 8.5
3. centos 7
4. maven 3.5
注意:tomcat6 和 tomcat7、8、9會有一些區別,下面會詳細介紹

二、配置【只需完成下面三步】

1、Tomcat 伺服器配置

找到[tomcat安裝的根路徑]/conf/tomcat-users.xml 檔案,編輯如下:

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0">
<role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager-gui"/> <role rolename="manager-script"/>
<role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/> </tomcat-users>

role標籤都是定義許可權,user標籤定義的是使用者,usernme和password都是自定義的,roles是賦予該使用者的許可權。

測試配置是否成功

但是有可能會出現 【管理頁面403 Access Denied】錯誤,詳情見下面問題2:

【修改Tomcat埠號-預設是8080】
如果需要修改,找到[tomcat安裝的根路徑]/conf/server.xml ,找到這一段。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

只需修改port的值即可。

二、配置Maven

開啟[Maven的安裝路徑]/conf/setting.xml檔案 ,找到這一段

<servers>
    <server>
      <id>tomcat8</id>
      <username>tomcat</username>
      <password>tomcat</password>
    </server>
  </servers>

id : tomcat+版本號
username : 在Tomcat配置的使用者名稱
password : 在Tomcat配置的密碼

三、使用idea新建一個Maven專案,開啟自動生成的pom檔案,配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ztz</groupId>
  <artifactId>deploy-project</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>deploy-project Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <defaultGoal>compile</defaultGoal>
    <finalName>deploy-project</finalName>
    <plugins>
      <!-- maven專案外掛執行配置 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <!-- maven遠端專案部署外掛 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!-- 填寫自己伺服器的IP地址和埠號,並且其他的不變,Tomcat7、8、9使用這個,Tomcat6使用另一個-->
          <url>http://192.168.199.133/manager/text</url>
          <server>tomcat8</server>
          <!-- 這個賬戶和密碼是自定義的,和Maven,Tomcat中配置要保持一致-->
          <username>tomcat</username>
          <password>tomcat</password>
          <port>80</port>
          <!-- 若tomcat專案中已存在,且使"mvn tomcat7:deploy"命令必須要設定下面的程式碼 -->
          <!-- 更新專案時,僅需要執行"mvn tomcat7:redeploy"命令即可 -->
          <!-- 上述命令無論伺服器是tomcat7、8或9,均是使用"mvn tomcat7:deploy"或"mvn tomcat7:redeploy" -->
          <update>true</update>
          <!-- 專案路徑 -->
          <path>/deploy-project</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

最主要的配置就是<built>標籤中,關於<built>詳解:
finalName:專案名
server: 伺服器名和版本
username: 和tomcat、maven中保持一致
password:和tomcat、maven中保持一致
port:需要部署到的埠,要和伺服器配置的埠一致
path:訪問專案的路徑

其他就可以和上面保持一致。

現在已經完成了所有的配置,那麼就開始測試一下能否部署成功,在idea 中點選右欄[Maven標籤]
這裡寫圖片描述
雙擊【tomcat7:deploy】完成部署,檢視控制檯資訊
這裡寫圖片描述

—————————————- 華麗 ——————————————–

遇到的問題1:
Tomcat已啟動,內網可以訪問,但是外網不可以訪問。
答 : 這很有可能是防火牆阻止了瀏覽器的訪問。
解決方式:centos7使用的防火牆是 firewall 而不是 iptables 可以開啟要訪問的埠,先檢視一下防火牆狀態: firewall-cmd –state , 結果是running 或者 not running , 建議running狀態下新增開放埠。
比如需要訪問的是8080埠,則可以這樣

firewall-cmd --permanent --zone=public --add-port=8080/tcp     # --permanent 表示永久新增;去掉標識臨時,重啟後恢復 
firewall-cmd --reload # 載入配置,使得修改有效。
檢視埠是否開放成功?
firewall-cmd --permanent --zone=public --list-ports #檢視開啟的埠

如果出現 8080/tcp 表示成功 。
需要了解firewall更多,點選這裡。

遇到的問題2:
管理頁面403 Access Denied
這說明你沒有許可權訪問,
解決方式:開啟/webapps/manager/META-INF/目錄下context.xml檔案,將下面這段註釋掉或者修改為下面這段。

<Valve className="org.apache.catalina.valves.RemoteAddrValve"  
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />

原因是: \d+.\d+.\d+.\d+ 標識任訪問,如果不新增這個,則只允許前面兩種型別IP訪問,allow中是用正則表示式來表示的。

遇到的問題3 :
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin: 2.0-SNAPSHOT:deploy (default-cli) on project helloworld: Cannot invoke Tomcat manager: Server returned HTTP response code: 401 for URL: http://localhost:8080/manager/text/deploy?path=%2Fhelloworld -> [Help 1]

該錯誤是在部署時出現的,是由於許可權問題,可能是你的 tomcat-users.xml中user的許可權不夠,也可能是你的idea中pom檔案的使用者名稱和密碼錯了。

———————————華麗的黃金分割線——————————————————–