heroku обновляет весеннее приложение с java 7 до java 8, столкнулся с проблемой java.util.Map $ Entry, которая не может быть решена

Я пытаюсь обновить приложение spring mvc с java 7 до 8 на heroku. Моя настройка выглядит следующим образом:

пом.xml

 <?xml version="1.0" encoding="UTF-8"?>
    <project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>spring-hibernate-template</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <org.springframework.version>3.1.1.RELEASE</org.springframework.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.2.13.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.2.13.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.2.8</version>
        </dependency>
        <dependency>
          <groupId>org.postgresql</groupId>
          <artifactId>postgresql</artifactId>
          <version>42.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>               
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.6.10.Final</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsimone</groupId>
            <artifactId>webapp-runner</artifactId>
            <version>7.0.34.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-extras</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.newrelic.agent.java</groupId>
            <artifactId>newrelic-agent</artifactId>
            <version>3.9.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.dropbox.core</groupId>
            <artifactId>dropbox-core-sdk</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>com.turo</groupId>
            <artifactId>pushy</artifactId>
            <version>0.12.0</version>
        </dependency>
          <!--<dependency>-->
             <!--<groupId>com.notnoop.apns</groupId>-->
             <!--<artifactId>apns</artifactId>-->
             <!--<version>1.0.0.Beta6</version>-->
        <!--</dependency>-->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.github.jsimone</groupId>
                                    <artifactId>webapp-runner</artifactId>
                                    <version>7.0.34.0</version>
                                    <destFileName>webapp-runner.jar</destFileName>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                          <id>copy-new-relic</id>
                          <phase>package</phase>
                     <goals>
                            <goal>copy-dependencies</goal>
                      </goals>
                      <configuration>
                            <includeGroupIds>com.newrelic.agent.java</includeGroupIds>
                            <includeArtifactIds>newrelic-agent</includeArtifactIds>
                            <stripVersion>true</stripVersion>
                      </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

свойства системы:

java.runtime.version=1.8

и в /WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>

Spring-Hibernate-Шаблон

<welcome-file-list>
    <welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
</welcome-file-list>

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/rest-dispatcher-servlet.xml
        /WEB-INF/rest-dispatcher-servlet-security.xml
    </param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>rest-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rest-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/error404.jsp</location>
</error-page>
<error-page>
    <error-code>405</error-code>
    <location>/WEB-INF/jsp/error500.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/jsp/error500.jsp</location>
</error-page>
<error-page>
    <error-code>503</error-code>
    <location>/WEB-INF/jsp/error500.jsp</location>
</error-page>

И, наконец, моя конфигурация spring xml (dispatcher-servlet.xml)

<?xml  version="1.0" encoding="UTF-8"?>

<context:annotation-config />
<context:component-scan base-package="com.myproject" />

<mvc:annotation-driven/>

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean id="jspViewResolverForBusiness" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/business/" />
    <property name="suffix" value=".jsp" />
</bean>

<mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources>

<!-- Task excutor -->
<bean id="taskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="5" />
    <property name="maxPoolSize" value="10" />
    <property name="WaitForTasksToCompleteOnShutdown" value="true" />
</bean>

<!-- Tiles configuration -->
<bean id="tilesviewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"/>
<bean id="tilesConfigurer"
    class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles/tiles-definitions.xml</value>
        </list>
    </property>
</bean>

<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource"/>

</bean>

<beans profile="default">
    <jdbc:embedded-database id="dataSource"/>        
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>
</beans>

<beans profile="prod">
    <bean class="java.net.URI" id="dbUrl">
        <constructor-arg value="#{systemEnvironment['DATABASE_URL']}"/>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url" value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + ':' + @dbUrl.getPort() + @dbUrl.getPath() + '?sslmode=require' }"/>
        <property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }"/>
        <property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }"/>
    </bean>
    
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <!-- change this to 'verify' before running as a production app -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>
</beans>

And I can confirm some part of the app is running fine, e.g some restful json endpoints (they do response correct json data) But any JSP page render is dead... the error log looks like this:

: at

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-03-14T18:07:52.329301+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:748)
2021-03-14T18:07:52.329302+00:00 app[web.1]:
2021-03-14T18:07:52.369622+00:00 app[web.1]: Mar 14, 2021 6:07:52 PM org.apache.jasper.compiler.JDTCompiler$1 findType
2021-03-14T18:07:52.369623+00:00 app[web.1]: SEVERE: Compilation error
2021-03-14T18:07:52.369624+00:00 app[web.1]: org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
2021-03-14T18:07:52.369625+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:372)
2021-03-14T18:07:52.369625+00:00 app[web.1]: at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:231)
2021-03-14T18:07:52.369626+00:00 app[web.1]: at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:187)
2021-03-14T18:07:52.369626+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:113)
2021-03-14T18:07:52.369629+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
2021-03-14T18:07:52.369630+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:122)

]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653)
2021-03-14T18:07:52.369644+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2021-03-14T18:07:52.369644+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-03-14T18:07:52.369644+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:748)
2021-03-14T18:07:52.369645+00:00 app[web.1]:
2021-03-14T18:07:52.518809+00:00 app[web.1]: Mar 14, 2021 6:07:52 PM org.apache.catalina.core.StandardWrapperValve invoke
2021-03-14T18:07:52.518811+00:00 app[web.1]: SEVERE: Servlet.service() for servlet [jsp] in context with path [/] threw exception [Unable to compile class for JSP:
2021-03-14T18:07:52.518812+00:00 app[web.1]:
2021-03-14T18:07:52.518813+00:00 app[web.1]: An error occurred at line: 1 in the generated java file
2021-03-14T18:07:52.518813+00:00 app[web.1]: The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files
2021-03-14T18:07:52.518814+00:00 app[web.1]:
2021-03-14T18:07:52.518814+00:00 app[web.1]: An error occurred at line: 1 in the generated java file
2021-03-14T18:07:52.518815+00:00 app[web.1]: The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files
2021-03-14T18:07:52.518815+00:00 app[web.1]:
2021-03-14T18:07:52.518816+00:00 app[web.1]: Stacktrace:] with root cause
2021-03-14T18:07:52.518816+00:00 app[web.1]: org.apache.jasper.JasperException: Unable to compile class for JSP:
2021-03-14T18:07:52.518816+00:00 app[web.1]:
2021-03-14T18:07:52.518817+00:00 app[web.1]: An error occurred at line: 1 in the generated java file
2021-03-14T18:07:52.518818+00:00 app[web.1]: The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files
2021-03-14T18:07:52.518818+00:00 app[web.1]:
2021-03-14T18:07:52.518818+00:00 app[web.1]: An error occurred at line: 1 in the generated java file
2021-03-14T18:07:52.518819+00:00 app[web.1]: The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files
2021-03-14T18:07:52.518819+00:00 app[web.1]:
2021-03-14T18:07:52.518820+00:00 app[web.1]: Stacktrace:
2021-03-14T18:07:52.518820+00:00 app[web.1]: at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
2021-03-14T18:07:52.518821+00:00 app[web.1]: at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
2021-03-14T18:07:52.518821+00:00 app[web.1]: at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:468)
2021-03-14T18:07:52.518822+00:00 app[web.1]: at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
2021-03-14T18:07:52.518822+00:00 app[web.1]: at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
2021-03-14T18:07:52.518822+00:00 app[web.1]: at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
2021-03-14T18:07:52.518823+00:00 app[web.1]: at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)

]: at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
2021-03-14T18:07:52.518832+00:00 app[web.1]: at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
2021-03-14T18:07:52.518832+00:00 app[web.1]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653)
2021-03-14T18:07:52.518832+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2021-03-14T18:07:52.518833+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-03-14T18:07:52.518833+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:748)
2021-03-14T18:07:52.518834+00:00 app[web.1]:
2021-03-14T18:07:52.720440+00:00 app[web.1]: Mar 14, 2021 6:07:52 PM org.apache.jasper.compiler.JDTCompiler$1 findType
2021-03-14T18:07:52.720458+00:00 app[web.1]: SEVERE: Compilation error
2021-03-14T18:07:52.720459+00:00 app[web.1]: org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
2021-03-14T18:07:52.720459+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:372)
2021-03-14T18:07:52.720460+00:00 app[web.1]: at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:231)
2021-03-14T18:07:52.720460+00:00 app[web.1]: at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:187)
2021-03-14T18:07:52.720461+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:113)

: at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
2021-03-14T18:07:52.720498+00:00 app[web.1]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653)
2021-03-14T18:07:52.720499+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2021-03-14T18:07:52.720499+00:00 app[web.1]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-03-14T18:07:52.720500+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:748)
2021-03-14T18:07:52.720500+00:00 app[web.1]:
2021-03-14T18:07:52.808532+00:00 app[web.1]: Mar 14, 2021 6:07:52 PM org.apache.jasper.compiler.JDTCompiler$1 findType
2021-03-14T18:07:52.808535+00:00 app[web.1]: SEVERE: Compilation error
2021-03-14T18:07:52.808535+00:00 app[web.1]: org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
2021-03-14T18:07:52.808536+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:372)
2021-03-14T18:07:52.808537+00:00 app[web.1]: at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:231)
2021-03-14T18:07:52.808537+00:00 app[web.1]: at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:187)
2021-03-14T18:07:52.808538+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:113)
2021-03-14T18:07:52.808539+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
2021-03-14T18:07:52.808540+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:122)
2021-03-14T18:07:52.808540+00:00 app[web.1]: at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:168)

Итак, я предполагаю, что это как-то связано с проблемой env java 8? Но на героку, я считаю, версия tomcat по умолчанию 9 https://devcenter.heroku.com/changelog-items/1724 Но я не знаю, как на самом деле проверить мою версию tomcat с помощью heroku cli, кто-нибудь понял?

Или это похоже на проблему с котом-героем? Если да, то какую версию tomcat мне следует использовать? Пожалуйста, сообщите Спасибо


person sefirosu    schedule 14.03.2021    source источник


Ответы (1)


Не могли бы вы попробовать обновить зависимость web-runner до 9.0.27.1? В настоящее время установлено,

       <dependency>
            <groupId>com.github.jsimone</groupId>
            <artifactId>webapp-runner</artifactId>
            <version>7.0.34.0</version>
            <scope>provided</scope>
        </dependency>
person Jitendra Gedam    schedule 14.03.2021
comment
Привет, Гедам, спасибо за совет, это работает, поэтому я обновил до ‹dependency› ‹groupId›com.github.jsimone‹/groupId› ‹artifactId›webapp-runner‹/artifactId› ‹version›8.5.47.2‹/version› ‹scope›при условии‹/scope› ‹/dependency› вы спасли мне жизнь, ха-ха :) - person sefirosu; 14.03.2021