使用maven部署專案到tomcat伺服器的筆記
阿新 • • 發佈:2019-01-24
使用了maven進行開發之後然後要把專案部署到伺服器中,剛開始以為是和普通的部署一樣然後按照著普通的部署方法發現行不太通(備註:也可以從事先編譯好再把webapp資料夾下面的內容拷貝到tomcat的子目錄webapp目錄下面,也可以藉助eclipse先把專案打包成war包放到tomcat的webapp目錄下面去然後啟動tomcat),然後才想到maven編譯生成的編譯檔案的目錄結構和普通的不太一樣於是才使用maven部署專案到tomcat中去,下面是部署過程以及遇到的一些問題。
1.把專案拷貝到伺服器中;
2.修改tomcat的tomcat-users.xml檔案,在裡面新增
3.修改maven的conf目錄下面的setting.xml檔案,在裡面新增(注意是在<servers></servers>節點下面新增)<role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="admin" password="admin" roles="manager-gui,manager-script"/>
<server>
<id>tomcat7</id>
<username>admin</username>
<password>admin</password>
</server>
注意:maven中的配置檔案中新增tomcat的id名字和tomcat中配置的username是對應的4.修改專案的pom.xml檔案,新增外掛和關聯tomcat服務(在plugins節點下面新增):
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<version>2.3.2</version>
<source>1.7</source>
<target>1.7</target>
<!-- 關聯tomcat服務 -->
<server>tomcat7</server> <!-- 此處的名字必須和setting.xml中配置的ID一致-->
<path>/ostpc</path> <!-- 此處的名字是專案釋出的工程名-->
<!--這個是為了解決引用不在倉庫中的jar包的問題,這個問題也可以通過把jar包安裝到倉庫中進行解決-->
<compilerArguments>
<bootclasspath>${env.JAVA_HOME}/jre/lib/rt.jar</bootclasspath>
<extdirs>src\main\webapp\WEB-INF\lib</extdirs>
</compilerArguments>
</configuration>
<!-- 要讓maven能夠釋出專案到tomcat中需要安裝tomcat外掛 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>tomcat7</server>
<username>admin</username>
<password>admin</password>
</configuration>
</plugin>
注意:username和password要和tomcat-users.xml檔案中的一致。
5.用命令列進入到專案的根目錄,先用mvn compile 下載一些需要的jar包;
6.mvn clean install ----->mvn tomcat7:redeploy (兩行命令我運行了兩次,第一次報錯,不知道什麼原因,然後再次執行就可以了,最開始用的是沒有install直接用mvn tomcat7:deploy這個方式來發布專案,但是我的這裡失敗了)
7.經過以上的步驟就可以成功的使用maven部署專案了。
所遇到的問題:
1.最開始mvn compile的時候一直報錯找不到包,但是在本地卻是可以執行,但那時伺服器卻不行,原來是因為一些jar包放在
WEB-INFO的的lib資料夾下面,maven找不到,所以要新增上
<compilerArguments>
<bootclasspath>${env.JAVA_HOME}/jre/lib/rt.jar</bootclasspath>
<extdirs>src\main\webapp\WEB-INF\lib</extdirs>
</compilerArguments>
<bootclasspath>${env.JAVA_HOME}/jre/lib/rt.jar</bootclasspath>是引用jre中的一些包,我的是因為mvn compile的時候報錯jpegcodec 找不到;2.mavencompile的時候報錯:maven 找不 到符號 [ERROR] 符號: 方法 getServletContext(),這個是因為使用的servlet-api的版本太低的原因,把pom.xml的依賴改成:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
使用eclipse來發布專案可以省事很多,但是在伺服器中一般是不會安裝這個idea的,所以就折騰了一下maven部署專案。