Eclipse Apache ISIS HelloWorld 原型错误:flatten、QHelloWorldObject、maven build java.sql.SQLException missing

问题描述

我正在尝试让 Apache ISIS 项目在 Eclipse 中正常工作。我遇到了一些问题:

  1. src/main/java/domainapp.dom.impl/HelloWorldobjects.findByName(...) 中的编译错误QHelloWorldobject cannot be resolved to a type

  2. pom.xml .../plugin/executions/execution/id=flatten: Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:flatten-maven-plugin:1.0.0:flatten

  3. 创建带有目标的 maven 构建配置时:clean package jetty:run。我得到:[ERROR] Failed to execute goal org.datanucleus:datanucleus-maven-plugin:5.0.2:enhance ... Error executing datanucleus tool org.datanucleus.enhancer.datanucleusEnhancer: InvocationTargetException: java/sql/sqlException: java.sql.sqlException ... org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal ... Caused by: java.lang.classNotFoundException: java.sql.sqlException(但是在 Eclipse 之外的命令行上一切正常。我也可以使用 org.apache.isis.WebServer 类将应用程序作为 Java 应用程序启动)

  4. 当我运行 Project > Datanuclues > Run Schema Tool SchemaInfo 时,我得到: datanucleus SchemaTool:架构信息 An error was encountered creating a PersistenceManagerFactory : Error creating transactional connection factory - please consult the log for more information. 从项目中添加/删除 datanucleus 没有任何区别。

我想我正确地遵循了 https://isis.apache.org/setupguide/2.0.0-M5/eclipse/about.html 中的所有步骤。 datanucleus 插件和 Lombok 都在那里。

我在 Linux (OpenSUSE 15.3) 机器上使用 openJDK 11,eclipse-2021-03(我全新安装了这个版本,下载了所有最新的插件,它在一个没有其他项目的全新 eclipse 工作区上)在里面)。

该项目是在 Eclipse 中使用 File > New > Project > Maven > Maven Project 创建的 GroupId: org.apache.isis.archetype,ArtifactId: helloworld-archetype

我似乎无法查明造成这种情况的原因,而且我一直在兜圈子,几个小时后我又回到了起点。有人能指出我正确的方向吗?

解决方法

感谢您试用 Apache Isis。您的问题可能是您正在尝试使用旧原型,可能与 JDK11 结合使用。由于 git repo 现在无处不在,我们决定转而使用 git repo 来维护我们的入门应用......这也意味着我们可以在正式发布节奏之外改进它们。

详细信息在 website 的主页上,在“快速入门”部分...或更多详细信息 here。如果您正在为 JDO 的 DN 增强器苦苦挣扎(诚然,这可能有些繁琐),那么请注意,从 2.0.0-M5 开始,我们也支持 JPA,这消除了该要求。

就您遇到的错误而言,这里有一些想法:

  1. Qxxx 文件是使用 DataNucleus 注释处理器创建的,该处理器作为编译过程的一部分运行。如果您使用 maven 构建应用程序,您应该会看到它们已创建 - 检查 Eclipse 的编译过程是否也在一个合理的位置生成它们,并且该位置是它编译的源路径之一。

  2. 我们不再使用 flatten 插件,所以这与旧原型有关。

  3. 再次与旧原型有关。 2.0.0-M5 使用 Spring Boot。

  4. 我不知道你为什么要运行 DN 的 SchemaTool。这用于手动创建模式。我们通常会让 DN 在原型模式下运行时自动创建 DB 模式。如果在生产环境中运行,Flyway 是处理架构迁移的方法。

如果您需要更多帮助,请考虑加入我们的slack channel