Maven web项目上传SAE的问题以及解决办法

为上传一个Java Web的项目到SAE上可是费尽心思啊,查了很多资料,也摸索了很久还是没有解决。主要的问题有两个,一个是使用Maven打包的jar包和SAE上提供的jar包冲突了,一个就是jdk的版本问题,SAE上目前只提供1.6和1.7版本的jdk。下面就这两个问题说明一下解决办法。
 
1.Maven的jar包和SAE的jar包冲突

这个问题在查看SAE上的JVM日志的时候会看到类似如下的错误提示:
java.lang.IllegalStateException: class org.springframework.web.filter.CharacterEncodingFilter is not a javax.servlet.Filter
一般出现这个错误提示是因为打包的war包里的servlet-api.jar包和SAE上的servlet-api.jar包冲突了,因此解决办法是在进行打包的时候不要将servlet-api.jar包打包即可。就是为了找这个忽略指定包的问题,找了半天,试过了warSourceExcludes和packagingExcludes,发现都不好使,我也没完全搞明白这两个配置的具体含义,需要进一步探究。
经过摸索和查找资料,发现了真正有效的办法,主要在于pom.xml中引入依赖包时设置scope标签。如下所示:
<dependency>
         <groupId>javax.servletgroupId>
         <artifactId>servlet-apiartifactId>
         <version>2.5version>
         <scope>providedscope>
 dependency>

 

注意scope标签,compile和runtime两种依赖打包时会打进去,provided、system、test都不会打进去。如果不想打包时将依赖包含进去,可以按实际情况选择后面的方式。
在我的项目中,引入的是 geronimo-servlet_2.5_spec的jar包,这里面就包括了servlet-api的jar包,因此我在打包的时候就忽略该jar包即可。如下所示:
 
<dependency>
         <groupId>org.apache.geronimo.specsgroupId>
         <artifactId>geronimo-servlet_2.5_specartifactId>
         <version>1.2version>
         <scope>providedscope>
 dependency>
2.jdk版本问题

目前SAE只支持jdk1.6和1.7,有时你可能使用的是jdk1.8的版本,在进行Maven打包的时候需要设置一下jdk的版本,如果版本不一致会可能会出现如下错误:
Unsupported major.minor version 51.0
需要在pom.xml进行jdk的版本设置,在pom.xml中进行如下配置:
<build>
    <finalName>GMDataVisualizationfinalName>
    <plugins>     
          <plugin> 
                <groupId>org.apache.maven.pluginsgroupId> 
                <artifactId>maven-war-pluginartifactId> 
                 <version>2.0.1version>  
          plugin>   
          <plugin> 
          <groupId>org.apache.maven.pluginsgroupId> 
          <artifactId>maven-compiler-pluginartifactId> 
          <configuration> 
               <source>1.7source> 
               <target>1.7target> 
          configuration> 
          plugin> 
     plugins> 
build>
如果创建的SAE项目使用的是jdk1.7,那么在上述配置时就填写1.7版本,如果是1.6则写1.6。

转载于:https://www.cnblogs.com/redstonecmx/p/4938903.html

你可能感兴趣的:(Maven web项目上传SAE的问题以及解决办法)