maven的功能很多,主要是管理依赖包,还有些插件也是十分实用的
比如tomcat插件,直接配置插件就能部署项目运行,而不用手动单独下载tomcat
一,如何在idea使用tomcat插件
1,pom.xml中添加toncat7插件配置
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9090</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
2,idea配置
Edit Configurations-》
其中的端口号可以自由修改
使用tomcat插件启动:
二,插件部署项目报错
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.1:run (default-cli) on project messystem: Could not start Tomcat: Failed to start component [StandardServer[-1]]: Failed to start component [StandardService[Tomcat]]: Failed to start component [StandardEngine[Tomcat]]: A child container failed during start -> [Help 1]
[ERROR]
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.1:run (default-cli) on project messystem: Could not start Tomcat: Failed to start component [StandardServer[-1]]: Failed to start component [StandardService[Tomcat]]: Failed to start component [StandardEngine[Tomcat]]: A child container failed during start -> [Help 1]
[ERROR]
这里的提示只能看出是tomcat插件执行run出错了,但是具体原因未知
可以往前看看是什么错误
这段错表面上能看出是最近的初始化加载了不同type的 “javax/servlet/ServletContext”,这或许就能看出问题,应该是版本不同了,
javax好像pom里面是有这个包的,
但是我的javax只有这里引入了,怎么可能会是不同版本的呢?
解决:javax这个包是tomcat提供的,使用插件启动,插件中的tomcat已经包含此包,pom又引入了此包,那么就可能导致版本不一样或者是冲突!!
javax能够在tomcat的lib目录下找到,这就说明这些包是能够由tomcat提供的
随便打开一个tomcat的lib目录
解决
那么就需要注意jar包的scope,改为 provided
修
pom.xml相关部分修改后如下
<dependency>
<!--此包虽然在tomcat的bin找不见,但是如果不指定scope,启动也是会报错的,如果注释掉此包,也能正常启动-->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>