2

У нас есть приложение с несколькими проектами, который работает под управлением: мавена, весна 4.2.7, весна-данных JPA 1.10.2, зимуют 5,1Затенение пакет пытается найти java.time.LocalTime в Java 7

Все работает нормально при запуске через eclipse, но как только мы пытаемся затенять в один спящий jarernate, кажется, что мы находимся в java 8 и ищем java.time.LocalTime.

  • Нет использование времени API Java 8 производится через все приложения
  • Все настроено на запуск через Java 7 (в п файлов, консоль, затмение)
  • Я попробовал пакет threetenbp с инъекции packageToScan на менеджере сущностей без успеха

Стек след:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [jar:file:....jar!/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.TypeNotPresentException: Type java.time.LocalTime not present 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:829) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.gvh.dsn.ficheParametrage.Main.main(Main.java:66) 
Caused by: java.lang.TypeNotPresentException: Type java.time.LocalTime not present 
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) 
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) 
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) 
    at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68) 
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) 
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) 
    at sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(ClassRepository.java:100) 
    at java.lang.Class.getGenericInterfaces(Class.java:819) 
    at org.hibernate.cfg.AttributeConverterDefinition.extractAttributeConverterParameterizedType(AttributeConverterDefinition.java:157) 
    at org.hibernate.cfg.AttributeConverterDefinition.<init>(AttributeConverterDefinition.java:114) 
    at org.hibernate.cfg.AttributeConverterDefinition.from(AttributeConverterDefinition.java:93) 
    at org.hibernate.cfg.AttributeConverterDefinition.from(AttributeConverterDefinition.java:73) 
    at org.hibernate.boot.model.process.internal.ScanningCoordinator.applyScanResultsToManagedResources(ScanningCoordinator.java:234) 
    at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:81) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:98) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:200) 
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34) 
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165) 
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:160) 
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:50) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
    ... 12 more 
Caused by: java.lang.ClassNotFoundException: java.time.LocalTime 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:274) 
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) 
    ... 36 more 

Maven оттенок конфигурации:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.4.3</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
        <transformer 
         implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
         <mainClass>${mainClass}</mainClass> 
        </transformer> 
        <transformer 
         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
         <resource>META-INF/spring.handlers</resource> 
        </transformer> 
        <transformer 
         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
         <resource>META-INF/spring.schemas</resource> 
        </transformer> 
       </transformers> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Вот мой ApplicationContext:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
          http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/task/spring-context-3.0.xsd"> 

    <context:annotation-config /> 

    <context:component-scan base-package="..." /> 

    <bean id="myContactDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver" /> 
     <property name="url" value="..." /> 
     <property name="username" value="..." /> 
     <property name="password" value="..." /> 
     <property name="initialSize" value="1" /> 
     <property name="maxActive" value="20" /> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" /> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence" /> 
     <property name="dataSource" ref="myContactDataSource" /> 
     <property name="persistenceUnitName" value="dalPU" /> 
     <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /> 
    </bean> 

    <jpa:repositories base-package="dal.repository" 
     entity-manager-factory-ref="entityManagerFactory" 
     transaction-manager-ref="transactionManager" /> 
</beans> 

Что мне не хватает?

UPDATE

В соответствии с просьбой в комментариях

агрегированный POM

<dependencies> 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.2.7.RELEASE</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>4.2.7.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>4.2.7.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.2.7.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>4.2.7.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
     <version>1.10.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>2.2</version> 
    </dependency> 

    <!-- Utils --> 
    <dependency> 
     <groupId>commons-lang</groupId> 
     <artifactId>commons-lang</artifactId> 
     <version>2.4</version> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>5.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.4</version> 
    </dependency> 
    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.1-901-1.jdbc4</version> 
    </dependency> 

    <!-- slf4j/log4j2 : Log --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.21</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.6.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.6.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-slf4j-impl</artifactId> 
     <version>2.6.2</version> 
    </dependency> 



    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.8.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.8.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.8.0</version> 
    </dependency> 

</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>${mainClass}</mainClass> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>${mainClass}</mainClass> 
          </transformer> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.handlers</resource> 
          </transformer> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.schemas</resource> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

'java.time.LocalTime' вводится в java-8 – sidgate

+0

Да, и поэтому я не понимаю, почему он его ищет. Пакеты даже не совместимы с java 8, и все настроено на запуск под java 7. Мы не используем пакет 'java.time' в любом месте. –

+0

Он выглядит, если ваш applicationContext.xml пытается инализировать bean-компонент с этим ...? – khmarbaise

ответ

1

выглядит как Hibernate делает некоторые пути к классам сканирования и обнаружения некоторых классов, которые ссылаются на отсутствующий Java 8 раз API. По крайней мере некоторые из файлов классов в вашем пути к классам содержат ссылки на типы времени Java 8.Использование POM и делает:

mvn dependency:unpack-dependencies

следуют:

grep -R java.time.LocalTime target/dependency | perl -p -e 's#Binary file target/dependency/(.*)\.class.*#$1#'

Я придумал этот список вещей на вашем пути к классам, который ссылается на Java 8 раз API:

org/springframework/data/jpa/convert/threeten/Jsr310JpaConverters$LocalTimeConverter 
org/springframework/data/convert/Jsr310Converters$DateToLocalTimeConverter 
org/springframework/data/convert/Jsr310Converters$LocalTimeToDateConverter 
org/springframework/data/convert/Jsr310Converters 
org/springframework/format/datetime/standard/TemporalAccessorParser 
org/springframework/format/datetime/standard/DateTimeConverters$LocalDateTimeToLocalTimeConverter 
org/springframework/format/datetime/standard/DateTimeConverters$ZonedDateTimeToLocalTimeConverter 
org/springframework/format/datetime/standard/DateTimeConverters$CalendarToLocalTimeConverter 
org/springframework/format/datetime/standard/DateTimeConverters$OffsetDateTimeToLocalTimeConverter 
org/springframework/format/datetime/standard/DateTimeFormatterRegistrar 
org/springframework/format/datetime/standard/Jsr310DateTimeFormatAnnotationFormatterFactory 

Материал в org.springframework.format используется весной для преобразования типов, я не думаю, что это когда-либо sed от Hibernate вообще. Я предполагаю, что оскорбительные пакеты: org.springframework.data.jpa.convert и org.springframework.data.jpa.convert.threeten.

Вы ссылаетесь на любой из этих пакетов или классов непосредственно в своей конфигурации? Вы пробовали сузить свой @EntityScan или @ComponentScan только пакетами, которые содержат ваш код?

+0

Это действительно 'spring-data-jpa' версия' 1.10.2', которая нуждалась в API-интерфейсе Java 8 раз. Доведено до версии 1.7.4 и работает! Огромное спасибо. –

+0

И, чтобы ответить на ваш последний вопрос, это так, весна только сканирует пакеты, где наш собственный код. –

0

я создал простой проект Maven в IntelliJ IDEA и добавлены все зависимости.

Затем я открыл POM, которые относятся к зависимостям Hibernate.

В ПОМ из org.javassist:javassist:3.20.0-GA я нашел это:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.2</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <testSource>1.8</testSource> 
     <testTarget>1.8</testTarget> 
     <compilerArgument>-parameters</compilerArgument> 
    </configuration> 
    </plugin> 

Я думаю, что эталонные источники являются причиной вашей проблемы. Когда вы запускаете приложение в Eclipse, тестов нет. Но когда вы строите с Maven, то все тесты выполняются (если вы не используете конкретный переключатель -DskipTests)

EDIT: возможно, поститься ... источники Javassist не собираются во время сборки.

0

У вашей зависимости от гибернации есть метод, который полагается на нее, что дает вам ошибку.

Кроме зимуют-EntityManager устарел и заменен спящем сердечником

 Смежные вопросы

  • Нет связанных вопросов^_^