Maven的Web项目在Eclipse下运行的有关问题总结
1.Maven默认的jdk是1.5,导致一动配置的话,就发生编译错误。看到网上如下指定compiler-plugin也不行。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<!-- 指定source和target的版本 -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
创建一个settings.xml,在eclipse的maven配置里,选择user的settings.xml。然后发现编译的时候不再报版本低的错误了。
<?xml version="1.0" encoding="UTF-8"?>
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
2.使用maven集成的tomcat7来运行web项目,要用到maven的tomcat7的插件。
在POM.xml里的<build>节里,加上
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/yourcontext</path>
</configuration>
</plugin>
就可以了,然后配置Run As ->Maven build....->Run Configurations
Goals的地方填上tomcat7:run
下面是几个常用的Goals命令
命令 | 描述 |
tomcat:deploy | 部署一个web war包 |
tomcat:reload | 重新加载web war包 |
tomcat:start |
启动tomcat |
tomcat:stop |
停止tomcat |
tomcat:undeploy |
停止一个war包 |
tomcat:run | 启动嵌入式tomcat ,并运行当前项目 |
注意Resolve Workspace artifacts这个勾一定要勾上,否则Debug的时候,断点会找不到
源代码。并且Run Configurations窗口的source tab里要加上项目(单有一个default也找不到源代码)。
3.虽然maven-tomcat7-plugin正常运行了,但是现在打开jsp画面的话,一直报jsp错。
“SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException”
原因是加载了tomcat7插件后,tomcat里也自带有servlet-api和jsp-api两个包,Eclipse中用maven构建web项目时,如果在pom里写了servlet-api和jsp-api的依赖。这两个依赖如果没有的话,项目编译又会出现问题,
解决办法是servlet-api和jsp-api的依赖里加上<scope>provided</scope>,这样Maven就不会复制两个包到部署环境里去了。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
至此,jsp页面也正常显示出来了。设置断点,点击eclipse的小虫子,执行前面配置好的Run Configuration
也能正常进入调试了。