Добавление цели переупаковки приводит к «Ошибка создания компонента с именем entityManagerFactory» - PullRequest
2 голосов
/ 08 февраля 2020

Я работаю над докеризацией приложения Spring Boot и сталкиваюсь с некоторыми проблемами:

  • Запуск mvn spring-boot:run работает просто отлично.
  • Перед добавлением repackage цель, я получаю no main manifest attribute, in target/app.war при запуске java -jar target/app.war
  • После добавления цели repackage я получаю ошибку с созданием entityManagerFactory при запуске java -jar target/app.war
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile
...
***************************
APPLICATION FAILED TO START
***************************

Description:

Field profileRepository in com.bnlucas.app.util.PostTransactionUtil required a bean named 'entityManagerFactory' that could not be found.


Action:

Consider defining a bean named 'entityManagerFactory' in your configuration.

Я не знаю много о внутренней работе Maven и не могу понять, что может происходить. У меня возникла проблема с javassist проблемами с зависимостями, и я попытался исключить ее и немного подробнее рассказал о том, что все происходило.

<plugin>
  <groupId>org.liquibase</groupId>
  <artifactId>liquibase-maven-plugin</artifactId>
  <version>${liquibase.version}</version>
  <dependencies>
    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.21.0-GA</version>
    </dependency>
    <dependency>
      <groupId>org.liquibase.ext</groupId>
      <artifactId>liquibase-hibernate4</artifactId>
      <version>${liquibase-hibernate4.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <version>${spring.boot.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.javassist</groupId>
          <artifactId>javassist</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
  ...
</plugin>

Пытаясь найти вещи, найденные на сайте, я изменил менеджер сущности ref:

@EnableJpaRepositories(
  basePackages = {"com.bnlucas.app.repository"},
  entityManagerFactoryRef = "entityManagerF"
)

и только что получил

***************************
APPLICATION FAILED TO START
***************************

Description:

Field profileRepository in com.bnlucas.app.util.PostTransactionUtil required a bean named 'entityManagerF' that could not be found.


Action:

Consider defining a bean named 'entityManagerF' in your configuration.

Я также пытался определить bean-компонент с помощью LocalContainerEntityManagerFactoryBean и все еще ничего.

@Bean
public EntityManagerFactory entityManagerFactory(DataSourceProperties dataSourceProperties) {
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setGenerateDdl(Boolean.TRUE);
    vendorAdapter.setShowSql(Boolean.TRUE);
    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setJpaVendorAdapter(vendorAdapter);
    factory.setPackagesToScan("com.bnlucas.app.repository");
    factory.setDataSource(dataSource(dataSourceProperties));
    factory.afterPropertiesSet();
    factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
    return factory.getObject();
}

Что mvn spring-boot:run делает иначе, чем mvn package spring-boot:repackage? Как менеджер сущностей определяется с первым и дает сбой с последним?

DatabaseConfiguration: https://gist.github.com/bnlucas/3e9db7d67aa52e43e8013a0cb81b40b3#file -databaseconfiguration- java

pom: https://gist.github.com/bnlucas/3e9db7d67aa52e43e8013a0cb81b40b3#file -pom- xml

1 Ответ

0 голосов
/ 14 февраля 2020

После устранения неполадок и сужения я обнаружил проблему. Это был фильтрующий флаг в военном плагине Maven.

Удаление <filtering />, здесь все готово и работает

<resource>
  <directory>.</directory>
  <targetPath>META-INF</targetPath>
  <filtering>true</filtering>
</resource>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <webResources>
      <resource>
        <!-- this is relative to the pom.xml directory -->
        <directory>config</directory>
        <includes>
          <include>build-${project.artifactId}.properties</include>
        </includes>
        <!-- override the destination directory for this resource -->
        <targetPath>META-INF</targetPath>
        <!-- enable filtering -->
        <filtering>true</filtering>
      </resource>
      <resource>
        <!-- this is relative to the pom.xml directory -->
        <directory>config</directory>
        <includes>
          <include>build-${project.artifactId}.properties</include>
        </includes>
        <!-- override the destination directory for this resource -->
        <targetPath>WEB-INF/classes</targetPath>
        <!-- enable filtering -->
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>.</directory>
        <targetPath>META-INF</targetPath>
      </resource>
    </webResources>
  </configuration>
</plugin>
...