Maven專案部署到tomcat+部署中的各種問題
第一次寫東東,心情有點兒小激動,因為今天剛剛把maven在tomcat上跑起來,所以趁熱打鐵,寫寫過程中經歷的很多小挫折以及心中狂奔過的無數個草泥馬。
還是先寫如何配置吧,沒接觸maven的我,以為只要直接maven build,然後run起來就可以在tomcat上飛快的奔跑起來,真是好多時候真心覺得自己每天都不帶腦子的。雖然我內心也在掙扎,好像我什麼都沒在tomcat上幹過,但是我就想相信直接就可以喲。真是蠢蠢噠到了極點。
說了那麼多,配置來了,網上大同小異。我也看了很多別人寫的,此處是借的別人寫的,怪我懶吧,就不一一手敲了。
具體方法如下:
- Tomcat7的使用者及許可權配置:在conf目錄下,找到tomcat-users.xml,新增manager許可權的使用者。這裡我把所用的許可權都新增給admin使用者了,具體程式碼如下:
<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="admin" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
- Maven的Server的配置:在Maven的安裝路徑找到conf目錄下的setting.xml檔案,在<servers>節點中新增tomcat7下配置的使用者資訊(id可以任意填寫,但username和password必須和步驟1一致):
<server>
<id>
tomcat7
</id><username>
admin
</username><password>
password
</password></server>
- 在Web專案的pom.xml檔案的<plugins>節點中,新增tomcat7的maven外掛:
<plugin>
<groupId>
org.apache.tomcat.maven
</groupId><artifactId>
tomcat7-maven-plugin
</artifactId><version>
2.1
</version><configuration>
<!-- 注意此處的url -->
<url>
http://localhost:8080/manager/text
</url> <username>admin</username> <!--此處使用者名稱及密碼也和第2步一致,反正我是這樣的 --> <password>password</password><server>tomcat7</server> <!-- 此處的名字必須和setting.xml中配置的ID一致-->
<path>/mavenProject</path> <!-- 此處的名字是專案釋出的工程名-->
</configuration>
</plugin>
-
最後,只需要maven build,然後在Goals中填上tomcat7:deploy就可以run起來了(必須事先啟動tomcat伺服器)。如果幸運的話,你第一回就能夠成功喲,這樣你只需要輸入localhost:8080/專案名稱,就可以看到你的頁面了。如果是成功的話,你tomcat的安裝目錄webapps顯示兩個多出連個東東,如圖。資料夾的名稱是我專案的名字。
接下來就該來聊聊過程中出現的問題了,想必這是最痛苦的時候了。
我出現過以下兩個ERROR。1. Failed to execute goalorg.codehaus.mojo:tomcat-maven-plugin:1.1:redeploy (default-cli) on projectpop-webs-server: Cannot invoke Tomcat manager:Error writing to server ->[Help 1]
2. ERROR] Failed to execute goalorg.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) onproject myproject: Cannot invoke Tomcat manager: Software caused connectionabort:socket write error -> [Help 1]
這兩個問題我都出現過,前一個問題是用pom.xml配置(在下面)中第一種方法build的,後一個錯誤使用第二種方法build的,參考了網上各種各樣的方法都沒解決我的問題。最後最後,就是這麼easy,把一個html改成text就好了。原諒我6和7都是用的html,姑娘我覺得有什麼關係呢,結果就是這麼大的關係,你說咋辦。
解決方法:使用tomcat6的時候,配置如下:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>tomcat</server>
<url>http://localhost/manager/html</url>
<path>/</path>
</configuration>
</plugin>
如果是tomcat7的話,url必須改成這樣
<url>http://localhost/manager/text</url>
POM.XML配置有兩種方法:1)在project的build節點下 新增tomcat-maven-plugin外掛資訊,如下寫法添加了tomcat6和tomcat7的外掛,如只用1種可以只寫一個
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<configuration>
<url>http://localhost:8080/manager/html</url>
<server>tomcat</server>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>tomcat7</server>
<username>admin</username>
<password>admin</password>
</configuration>
</plugin>
</plugins>
--2.0-SNAPSHOT版本已經release了
2) 在project節點下,在外掛倉庫(plugin repositories)和普通倉庫(repositories)中新增以下倉庫到pom.xml,保證maven可以從倉庫中下載到tomcat-maven-plugin外掛,少添加了這段資訊,會出現如下報錯資訊:
No plugin found for prefix 'tomcat' in the current project andin the plug(這個問題我也出現過,我思考應該是這樣的原因。有時候第一次釋出的時候正常,再發布的時候就錯誤了。網上是這樣講的,如果第一種方法,釋出的時候tomcat7:deploy,但有些人再次釋出就有錯。但是如果用以下這個方法,就可以再次釋出,goals上填tomcat:redeploy。我先用的第二種,後來又換成第一種,後來發現時html那兒錯了,跑起來了也就啥也不顧了,不過這也是一種方法,大家有問題的時候可以試用以下喲。)
<repositories>
<repository>
<id>people.apache.snapshots</id>
<url>
http://repository.apache.org/content/groups/snapshots-group/
</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>apache.snapshots</id>
<name>Apache Snapshots</name>
<url>
http://repository.apache.org/content/groups/snapshots-group/
</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
就這麼簡單,折騰了好一會兒,心塞,感覺所有的問題全被我全碰到過!關於SSM整個框架的搭建以及其中的遇到的問題,我陸續會發出來,與大家共享,希望能與大家一塊兒進步。