1. 程式人生 > >Maven專案部署到tomcat+部署中的各種問題

Maven專案部署到tomcat+部署中的各種問題

     第一次寫東東,心情有點兒小激動,因為今天剛剛把maven在tomcat上跑起來,所以趁熱打鐵,寫寫過程中經歷的很多小挫折以及心中狂奔過的無數個草泥馬。

    還是先寫如何配置吧,沒接觸maven的我,以為只要直接maven build,然後run起來就可以在tomcat上飛快的奔跑起來,真是好多時候真心覺得自己每天都不帶腦子的。雖然我內心也在掙扎,好像我什麼都沒在tomcat上幹過,但是我就想相信直接就可以喲。真是蠢蠢噠到了極點。

   說了那麼多,配置來了,網上大同小異。我也看了很多別人寫的,此處是借的別人寫的,怪我懶吧,就不一一手敲了。

   具體方法如下:

  1. 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"/>

  2. Maven的Server的配置:在Maven的安裝路徑找到conf目錄下的setting.xml檔案,在<servers>節點中新增tomcat7下配置的使用者資訊(id可以任意填寫,但username和password必須和步驟1一致):
    <server>
    <id>tomcat7</id>
    <username>admin</username>
    <password>password</password>
    </server>
  3. 在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>
  4. 最後,只需要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整個框架的搭建以及其中的遇到的問題,我陸續會發出來,與大家共享,希望能與大家一塊兒進步。