【问题标题】:Quarkus (1.10.4/1.11.0) build. no default datasource foundQuarkus (1.10.4/1.11.0) 构建。未找到默认数据源
【发布时间】:2021-04-29 07:28:40
【问题描述】:

我正在尝试将现有 Quarkus (1.7.5) 项目迁移到 Quarkus 版本 1.11.0 我可以一直构建到版本 1.10.3。从版本 1.10.4 在构建期间我得到以下异常(这是查看 changlog #13894 的新功能 - 在模型类和没有数据源时抛出异常)

但是,我根据使用 jdbc postgres 的文档在应用程序属性中声明数据源: https://quarkus.io/guides/hibernate-orm

通过 quarkus-extension.yaml 了解了 agroal,但没有帮助

我错过了什么?感谢任何指针

application.properties

..further declarations
...
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=my_user
quarkus.datasource.password=my_password
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/mydatabase
...
..further declarations
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.11.0.Final:build (default) on project isp-testArch11-core: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR]         [error]: Build step io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor#configurationDescriptorBuilding threw an exception: io.quarkus.runtime.configuration.ConfigurationException: Model classes are defined for the default persistence unit but no default datasource found: the default EntityManagerFactory will not be created.
[ERROR]         at io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor.handleHibernateORMWithNoPersistenceXml(HibernateOrmProcessor.java:697)
[ERROR]         at io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor.configurationDescriptorBuilding(HibernateOrmProcessor.java:310)
[ERROR]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR]         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR]         at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[ERROR]         at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:972)
[ERROR]         at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
[ERROR]         at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
[ERROR]         at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
[ERROR]         at java.base/java.lang.Thread.run(Thread.java:834)
[ERROR]         at org.jboss.threads.JBossThread.run(JBossThread.java:501)
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :isp-testArch11-core

直到 1.10.3 的版本都可以工作。 使用:

Maven 3.6.3

Java 11

【问题讨论】:

    标签: hibernate exception build datasource quarkus


    【解决方案1】:

    这个问题与 quarkus 的修复有关。 https://github.com/quarkusio/quarkus/issues/14930

    团队会更改错误信息,这里是提交 https://github.com/quarkusio/quarkus/commit/40b6345f0f71e8d585c21d6576ab26920c9b6dc4

    为了解决这个问题,在你的 application.properties 中添加一个“假”的默认数据源配置

    quarkus.datasource.db-kind=postgresql
    quarkus.datasource.username=postgres
    quarkus.datasource.password=s3cr3t
    quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres
    quarkus.hibernate-orm.log.sql=true
    

    另一个“最糟糕”的解决方案是创建一个 Java 存储库 (Panache),并且 entityManager 将被“创建”(不需要 application.properties 数据源定义)

    @ApplicationScoped
    public class FakeRepository implements PanacheRepository<MyJPAEntity> {
       ...not necessay implementation
    }
    

    考虑一下,如果您正在使用 JPA 实体库,更好的解决方案是删除您对项目的 quarkus-hibernate-orm-* 依赖,只添加 javax-persistence.api 依赖。

    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>
    

    希望有帮助

    【讨论】:

      【解决方案2】:

      我们找出了问题所在。

      Maven 忽略了 application.properties,因为在 pom.xml 中,在构建作业中,声明了其他资源。

      如果你不删除资源,它会在默认目录中查找,例如 src/main/recources

      如果你声明了任何额外的资源,你也必须明确声明 src/main/recources。

      <build>
       <finalName>${project.parent.artifactId}</finalName>
       <resources>
        <resource>
          <directory>../additional_stuff</directory>
          <includes>
            <include>**/*.*</include>
          </includes>
        </resource>
        <resources>
        <resource>
          <directory>src/main/resources</directory>
          <includes>
            <include>**/*.*</include>
          </includes>
        </resource>
      </resources>
      ...
      </build>
      

      【讨论】:

        猜你喜欢
        • 2021-09-10
        • 2021-11-19
        • 2017-02-28
        • 2014-12-05
        • 2013-04-23
        • 1970-01-01
        相关资源
        最近更新 更多