Maven创建war类型项目方法
一、新建Maven Projected项目,选择war类型
二、普通web项目目录
三、maven的war项目目录
- 这里需要手动添加META-INF和WEB-INF目录。
四、在webapp目录下添加META-INF和WEB-INF目录,以及复制web.xml文件到WEB-INF目录下。
五、普通web项目的WEB-INF目录下有一个lib目录,用来快速导入jar包。但是在maven的war类型项目中不需要该目录,因为所有的依赖都在pom.xml中配置。
六、配置tomcat运行环境,在pom.xml中添加依赖的jsp-api、servlet-api、jstl的jar包。
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<!-- 只在编译器生效,否则会和maven插件自带的冲突
项目发布时该jar包不会发布
-->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<!-- 只在编译器生效,否则会和maven插件自带的冲突
项目发布时该jar包不会发布
-->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
- 这时可以创建一个servlet,并将该项目发布到本地tomcat。
Maven配置tomcat插件及错误解决
一、配置tomcat插件
- 配置之后,该项目的运行和本地tomcat一点关系都没有了,电脑可以不下载tomcat就可以运行。相当于重新下载了一个tomcat,而且每个项目都相当于配置了一个独有的tomcat。
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 控制tomcat的端口号 -->
<port>80</port>
<!-- 项目发布到tomcat之后的名称 -->
<!-- /相当于把项目名设置成root -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
二、运行tomcat插件
三、异常处理
- 如果上一步报错:
Failed to execute goal org.apache.maven.plugins:
maven-compiler-plugin:3.1:
compile (default-compile) on project myweb: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are
running on a JRE rather than a JDK?
- 解决
在eclipse中,选择window→preference→java→Installed JREs,点add添加你的jdk路径,选jdk而不是jre,之前的报错原因就出在这里。
如果没有jdk安装路径,需要自己添加,方法如下:
之后重新点击maven build进行启动。出现以下界面说明成功:
四、如果再次运行该项目时,报错误:
Failed to clean project: Failed to delete
D:\eclipse\workspace\myweb\target\tomcat\logs\access_log.
是因为上一次的项目还在运行,关闭即可。
关闭后重新运行就可以。
五、要特别注意依赖中作用域的使用
不添加作用域的话,运行文件在访问时会报错,因为和maven插件中自带的jar包冲突,有两个jar包名称一致,导致运行错误。
Maven配置资源拷贝插件
一、maven默认只把src/main/resources里面的非.Java文件进行编译到classes中。
二、如果希望src/main/java下的xml文件也被编译到classes中,需要配置资源拷贝插件。
三、实现:
- 在<build>标签中添加下面代码:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>