使用了maven进行开发之后然后要把项目部署到服务器中,刚开始以为是和普通的部署一样然后按照着普通的部署方法发现行不太通(备注:也可以从事先编译好再把webapp文件夹下面的内容拷贝到tomcat的子目录webapp目录下面,也可以借助eclipse先把项目打包成war包放到tomcat的webapp目录下面去然后启动tomcat),然后才想到maven编译生成的编译文件的目录结构和普通的不太一样于是才使用maven部署项目到tomcat中去,下面是部署过程以及遇到的一些问题。
1.把项目拷贝到服务器中;
2.修改tomcat的tomcat-users.xml文件,在里面添加
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script"/>
3.修改maven的conf目录下面的setting.xml文件,在里面添加(
注意是在<servers></servers>节点下面添加)
<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>
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>