Maven 不受支持的ClassVersionError不受支持的major.minor版本52.0(无法加载类)

Maven 不受支持的ClassVersionError不受支持的major.minor版本52.0(无法加载类),maven,deployment,javacompiler,Maven,Deployment,Javacompiler,在我的机器上部署相同的war文件可以正常工作。但是在ubuntu 14上。在远程服务器上的JDK1.8中,当我使用maven将其部署到tomcat时,总是会遇到异常。 我检查了远程服务器上列出的jdk: root@li1242-163:~# sudo update-alternatives --config java There are 2 choices for the alternative java (providing /usr/bin/java). Selection P

在我的机器上部署相同的war文件可以正常工作。但是在ubuntu 14上。在远程服务器上的JDK1.8中,当我使用maven将其部署到tomcat时,总是会遇到异常。 我检查了远程服务器上列出的jdk:

root@li1242-163:~#  sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-oracle/jre/bin/java          1072      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
* 2            /usr/lib/jvm/java-8-oracle/jre/bin/java          1072      manual mode
这是远程服务器上的java版本:

root@li1242-163:~# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)



May 26, 2015 12:10:27 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet crudservlet
java.lang.UnsupportedClassVersionError: crudapproot/EntityResource : Unsupported major.minor version 52.0 (unable to load class crudapproot.EntityResource)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2948)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1208)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:274)
    at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:402)
    at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:397)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener$AnnotatedClassVisitor.getClassForName(AnnotationAcceptingListener.java:262)
    at org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener$AnnotatedClassVisitor.visitEnd(AnnotationAcceptingListener.java:224)
    at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:697)
    at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:506)
    at org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener.process(AnnotationAcceptingListener.java:170)
    at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:899)
    at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:856)
    at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:762)
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1190)
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1162)
    at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1158)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:322)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:338)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:171)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:363)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1279)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1192)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
我正在使用maven将webapplication部署到远程服务器,pom文件配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>OrbithubWeb</groupId>
  <artifactId>OrbithubWeb</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <!--  customize the catalina_home for remote deployment
    for tomcat7, the remotedeployserverurl is http://localhost:8080/manager/text 
        and for tomcat6 http://localhost:8080/manager/html 
        -->
  <properties>
        <java-version>1.7</java-version>
        <org.springframework-version>4.0.3.RELEASE</org.springframework-version>
        <warfilename>${project.groupId}</warfilename>
        <!--  change the url to  : http://45.79.143.163:8080/manager/text  -->
        <remotedeployserverurl>http://localhost:8080/manager/text</remotedeployserverurl>
    </properties>

  <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <!-- spring framework just added ends here -->


        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20140107</version>
        </dependency>


         <!--  jersey dependencies ends -->
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>3.3.1</version>
        </dependency>
        <!--  jersey dependency ends -->

        <dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

        <!-- used for httpclient library -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.2</version>
        </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.35</version>
    </dependency>

    <!--  adding for log4j dependency for logging -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>


<!--  Added 25 May: added the dependecy for Jax-RS 2.0 jersey core Servlet 3.x implementation -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.17</version>
    </dependency>
<!--  Added 25 May: for jersey-client implementation  -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.17</version>
    </dependency>
<!--  dependency resolved for jax-rs -->


<!--  Uses this dependency to read from build.properties file. The artifact id # properties-maven-plugin  -->
    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
    </dependency>

    </dependencies>



    <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
             <!--  changes the default location of war deployment --> 
             <!--  commented it since we are directly deploying war to the ${catalina_home}/webapps -->
         <!--  <warName>${warfilename}</warName> -->
     <!--     <outputDirectory>${catalina_home}/webapps</outputDirectory> -->
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>

        </configuration>
      </plugin>



      <!-- added to deploy maven build to remote tomcat, update = true :: redeploy's the war files on update  -->     
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <url>${remotedeployserverurl}</url>
            <server>tomcat7</server>
            <path>/${project.groupId}</path>
            <!--  configuring the tomcat7 to update itself while deploying -->
            <update>true</update> 
            <!--  added this on 25 April -->    
        </configuration>
    </plugin>


    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
           <!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. -->
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
              <!--  taking the build.properties from the relative location of the pom file -->
                <file>build.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>



    </plugins>
  </build>

</project>
tomcat上war部署文件的快照为:

root@li1242-163:~/OrbitHub-Java-Rest-API# mvn clean tomcat7:deploy
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building OrbithubWeb 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ OrbithubWeb ---
[INFO] Deleting /root/OrbitHub-Java-Rest-API/target
[INFO] 
[INFO] >>> tomcat7-maven-plugin:2.2:deploy (default-cli) @ OrbithubWeb >>>
[INFO] 
[INFO] --- properties-maven-plugin:1.0-alpha-2:read-project-properties (default) @ OrbithubWeb ---
[INFO] 
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ OrbithubWeb ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ OrbithubWeb ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 19 source files to /root/OrbitHub-Java-Rest-API/target/classes
[WARNING] /root/OrbitHub-Java-Rest-API/src/test/TestCallToWebapp.java: /root/OrbitHub-Java-Rest-API/src/test/TestCallToWebapp.java uses or overrides a deprecated API.
[WARNING] /root/OrbitHub-Java-Rest-API/src/test/TestCallToWebapp.java: Recompile with -Xlint:deprecation for details.
[WARNING] /root/OrbitHub-Java-Rest-API/src/asyncrequesthandlr/ControllableExecutors.java: /root/OrbitHub-Java-Rest-API/src/asyncrequesthandlr/ControllableExecutors.java uses unchecked or unsafe operations.
[WARNING] /root/OrbitHub-Java-Rest-API/src/asyncrequesthandlr/ControllableExecutors.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-resources-plugin:2.3:testResources (default-testResources) @ OrbithubWeb ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /root/OrbitHub-Java-Rest-API/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ OrbithubWeb ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ OrbithubWeb ---
[INFO] No tests to run.
[INFO] Surefire report directory: /root/OrbitHub-Java-Rest-API/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-war-plugin:2.4:war (default-war) @ OrbithubWeb ---
[INFO] Packaging webapp
[INFO] Assembling webapp [OrbithubWeb] in [/root/OrbitHub-Java-Rest-API/target/OrbithubWeb-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [/root/OrbitHub-Java-Rest-API/WebContent]
[INFO] Webapp assembled in [202 msecs]
[INFO] Building war: /root/OrbitHub-Java-Rest-API/target/OrbithubWeb-0.0.1-SNAPSHOT.war
[INFO] 
[INFO] <<< tomcat7-maven-plugin:2.2:deploy (default-cli) @ OrbithubWeb <<<
[INFO] 
[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ OrbithubWeb ---
[INFO] Deploying war to http://45.79.143.163:8080/OrbithubWeb  
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Uploading: http://45.79.143.163:8080/manager/text/deploy?path=%2FOrbithubWeb&update=true
Uploaded: http://45.79.143.163:8080/manager/text/deploy?path=%2FOrbithubWeb&update=true (12330 KB at 20279.0 KB/sec)

[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Deployed application at context path /OrbithubWeb
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.924s
[INFO] Finished at: Tue May 26 00:00:28 UTC 2015
[INFO] Final Memory: 22M/54M
[INFO] ------------------------------------------------------------------------

这对我很有用,我在这里找到了一个同样的教程: :


仔细检查服务器上运行的JVM版本。可能是一些路径混淆了,这是一个旧版本。@Thilo,我检查了远程服务器上的系统版本,这是maven的配置:ApacheMaven 3.0.5 maven home:/usr/share/maven Java version:1.8.045,供应商:Oracle Corporation Java home:/usr/lib/jvm/Java-8-Oracle/jre默认语言环境:en_US,平台编码:UTF-8操作系统名称:linux,版本:4.0.4-x86_64-linode57,arch:amd64,family:unixlooks,如Tomcat正在使用JDK7。是的,我发现curl给了我:OK-服务器信息Tomcat版本:ApacheTomcat/7.0.52 Ubuntu操作系统名称:Linux操作系统版本:4.0.4-x86_64-linode57操作系统架构:amd64 JVM版本:1.7.0_79-b14 JVM供应商:Oracle公司,我会更改它。非常感谢您的支持!
Made changes to the JAVA_HOME variable : vi /etc/default/tomcat7

java8 was found here:
/usr/lib/jvm/java-8-oracle/bin/

sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-8-oracle/bin/javac" 1



sudo update-alternatives --config javac

To check the jvm that the tomcat is using :
ps -ef | grep tomcat

Also,  curl http://admin:admin@localhost:8080/manager/text/serverinfo