Maven中Tomcat插件的使用

来源:互联网 发布:算法工程师 什么专业 编辑:程序博客网 时间:2024/05/29 10:09

以前常在Maven中用Jetty插件。由于系统的正式部署环境为Tomcat,因此把设置了Tomcat插入,可在使用过程中一直出错;现将设置过程中的错误整理了一个为广大初学者一些提示。以免在这些上面浪费时间。

系统原配置为Jetty插件。配置信息如下:


<plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>8.1.16.v20140903</version><configuration><scanIntervalSeconds>3</scanIntervalSeconds></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.12.4</version><configuration><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin>
由于真实的部署环境为Tomcat,因此需要将Jetty插件改为Tomcat插件。使开发环境更接近于真实环境。因此新的配置如:

    <plugin>    <groupId>org.codehaus.mojo</groupId>    <artifactId>tomcat-maven-plugin</artifactId>    <version>1.1</version>    <configuration>    <path>/</path>    <port>8080</port>    <uriEncoding>UTF-8</uriEncoding>  <server>tomcat7</server>    </configuration>    </plugin>
但是设置为Tomcat插件后。问题不断。错误如下:

java.lang.ClassCastException: org.springframework.web.filter.DelegatingFilterProxy cannot be cast to javax.servlet.Filterat org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
从网上查找原因,说是servlet-api.jar包引起的冲突。因此Tomcat6及以上版本中自带servlet-api,因此两个不同jar之间引发此冲突。因此将原有代码

<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency>
改为
<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
熟悉MAVEN的朋友应该都知道(<scope>provided</scope>)的含义,这里不做介绍。

然后通过(tomcat:run)命令启动Tomcat,可是上面的错误依旧存在。

因此我打开(POX.XML)选择(Dependency Hierarchy)选择,查看系统有哪些依赖。发现在(Resolved Dependencies)选择卡中存在(javax.servlet-api)。因此需要将这个jar的依赖给删除。而这个jar是通过其他jar自动依赖的,因此需要加入下面的代码

  <dependency>  <groupId>net.mingsoft</groupId>  <artifactId>shiro-freemarker-tags</artifactId>  <version>${shiro-freemarker-tags-version}</version>  <exclusions>  <exclusion>  <artifactId>javax.servlet-api</artifactId>  <groupId>javax.servlet</groupId>  </exclusion>  </exclusions>  </dependency>

因外也可以在javax.servlet-api这个选项中右击,选择(Exclude Maven Artifact...)会弹出一个对话框,选择不想依赖的jar单击确定即可。


重新运行tomca:run之后系统正常。







0 0
原创粉丝点击