【问题标题】:Importing hyperjaxb purchase order tutorial into Eclipse将 hyperjaxb 采购订单教程导入 Eclipse
【发布时间】:2014-10-09 19:01:41
【问题描述】:

我想将示例应用程序从this tutorial 导入到 Eclipse 中。我不断收到与文件放置位置相关的错误。当我创建一个 Main 类来运行本教程中的代码时,当 Main 类位于构建路径中时,我会从 Eclipse 中获得编译错误,看不到所需的包,或者我得到一个

启动错误:节不包含主类型

当 Main 类不在构建路径中时。

到目前为止,我已经采取了以下步骤:

  1. 下载压缩包
  2. 导航到 cmd.exe 中的文件夹
  3. 运行 mvn clean install
  4. 在eclipse中新建maven项目
  5. 将以下内容添加到 pom.xml 中
  6. 在 Eclipse 中运行 Maven 更新项目
  7. 创建 target/generated-sources/xjc 文件夹
  8. 将hyperjaxb生成的文件导入 目标/生成源/xjc
  9. 在eclipse项目的其他地方创建一个Main类来运行测试 代码
  10. 从“使用 JAXB 和 JPA”部分开始添加代码 Main 类的教程

上述步骤导致我上面描述的错误。 在 Eclipse 中使用的分步说明是什么?

【问题讨论】:

  • @lexicore 你还不支持eclipse。感谢您为 Maven 社区提供的内容。如果我能让 hyperjaxb 在 eclipse 中工作,我会告诉你的。
  • “你还不支持 eclipse”是一个错误的声明。
  • JAXB 无需安装支持即可完美运行,因为它提供了架构级别的支持,避免了复杂的配置。来自 eclipse 用户的问题为以后几代 hyperjaxb 的设计提供了机会,以避免需要复杂的端口来 eclipse。与此同时,我还有一个问题希望完成将当前一代 hyperjaxb 的所有功能安装到 eclipse 中的工作:stackoverflow.com/questions/26348480/…
  • Link(confluence.highsource.org/display/HJ3/Purchase+Order+Tutorial) 在上述问题详细信息中提供,不再起作用。关于相同的新链接的任何想法??
  • @Pushpendra 看看 Spring Data JPA 而不是 hyperjaxb。 hyperjaxb 链接失效的原因是 hyperjaxb 只是一个开发人员的一个业余项目,只有几个用户。相比之下,Spring Data 由一个庞大的社区提供支持,并且可以自动化所有 Java 实体进出数据库的翻译。编写您的 JAXB 代码以获取 XML 到实体中,然后让 Spring Data 进行 ORM 设置。并覆盖 Spring Data 默认值来自定义它。

标签: java eclipse jaxb hyperjaxb


【解决方案1】:

好的,这会很长。

首先,让我们确定我们从哪里开始。在this question 中,我们终于发现教程运行良好,只是在查找生成的 Java 代码时遇到了一些困难。

附带说明,本教程是一个使用 maven-hyperjaxb3-plugin 的 Maven 项目。在 Maven 中的标准约定是在target\generated-sources\myTool 中生成代码。 JAXB 的代码生成工具称为 XJC,因此模式派生代码的标准约定是 target\generated-sources\xjcmaven-jaxb2-plugin 也可以。

所以从现在开始,我假设 PO 教程运行良好:生成代码,使用 HSQLDB 数据库运行往返测试等。

你现在要问的基本上是三件事:

  • 如何切换到 MySQL?
  • 如何使用 hbm2ddl 生成数据库架构?
  • 如何将项目导入 Eclipse?

请注意,这些都不是 Hyperjaxb 特有的。

让我们开始吧。

切换到 MySQL

首先,您必须将pom.xml 中的HSQLDB 替换为MySQL。删除这个:

    <dependency>
        <groupId>hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>1.8.0.7</version>
        <scope>test</scope>
    </dependency>

并添加:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.0.5</version>
        <scope>test</scope>
    </dependency>

接下来,编辑src/test/resources/persistence.properties。替换这个:

hibernate.dialect=org.hibernate.dialect.HSQLDialect
hibernate.connection.driver_class=org.hsqldb.jdbcDriver
hibernate.connection.username=sa
hibernate.connection.password=
hibernate.connection.url=jdbc:hsqldb:target/test-database/database
hibernate.hbm2ddl.auto=create-drop
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.jdbc.batch_size=0

有了这个:

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.username=...
hibernate.connection.password=...
hibernate.connection.url=jdbc:mysql://localhost/hj3
hibernate.hbm2ddl.auto=create-drop
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.jdbc.batch_size=0

我个人目前手头没有 MySQL 数据库,所以我无法真正测试往返。所以我会注释掉

<!--roundtripTestClassName>RoundtripTest</roundtripTestClassName-->

pom.xml.

如果您手头有数据库,只需在提到的persistence.properties 文件中配置正确的 URL/用户名/密码。

此时,您的 Maven 项目已重新配置为使用 MySQL。如果往返测试未注释掉且数据库可用,则往返测试应与 DB 一起运行,即创建架构、导入示例 XML、读回并比较 alpha 和 omega。

所以现在我们有了 MySQL 教程,可以继续学习了。

生成数据库架构

这是一个很难弄清楚的部分。

为了在文件中生成数据库模式,您必须使用hbm2ddl 工具。有 Maven 插件,在 Hibernate 3 的情况下,Codehaus 插件似乎是领先的。最后,我想出了以下配置。您必须将以下插件添加到您的pom.xml (project/build/plugins):

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>hibernate3-maven-plugin</artifactId>
            <version>3.0</version>
            <executions>
                <execution>
                    <id>generate-schema</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <hibernatetool>
                    <classpath>
                        <path location="${project.build.directory}/classes" />
                    </classpath>

                    <jpaconfiguration persistenceunit="org.jvnet.hyperjaxb3.ejb.tests.pocustomized" propertyfile="src/test/resources/persistence.properties"/>

                    <hbm2ddl export="false" create="true" update="false" format="true" outputfilename="schema.ddl" />

                </hibernatetool>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate.javax.persistence</groupId>
                    <artifactId>hibernate-jpa-2.0-api</artifactId>
                    <version>1.0.0.Final</version>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-entitymanager</artifactId>
                    <version>3.6.5.Final</version>
                </dependency>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.0.5</version>
                </dependency>
            </dependencies>
        </plugin>

有几件事很重要:

  • Hyperjaxb3 生成 JPA 注解,所以必须使用jpaconfiguration
  • 因此hibernate3-maven-plugin 必须在编译阶段执行(您需要类从中读取注释,因此必须在那时编译它们)。
  • 您必须将已编译的类 (${project.build.directory}/classes) 包含到 hibernatetool 的类路径中,以便它可以发现类并读取注释。
  • 您必须让 hibernatetool 知道您在哪里可以找到您的 Hibernate 属性 (propertyfile="src/test/resources/persistence.properties")。
  • 最后你必须让它知道你想要处理哪个持久化单元 (persistenceunit="org.jvnet.hyperjaxb3.ejb.tests.pocustomized")。看看target/generated-sources/xjc/META-INF/persistence.xml
  • 最后,添加所有必需的依赖项。

你终于到达了我在上面发布的配置。此时,构建还应该在target/sql/hibernate3/schema.ddl 中生成数据库模式。这是第二个问题。

现在我们已经完成了 Maven 项目,让我们切换到 Eclipse。

将项目导入 Eclipse

我个人不明白的是

8.) 将hyperjaxb生成的文件导入target/generated-sources/xjc

Hyperjaxb3 只是在这个目录中生成 Java 文件(在包中)。所以你不会在任何地方导入任何东西。不要尝试手动复制文件。

正确的做法是在 Eclipse 中使用标准的 m2e 插件,然后将 Maven 项目导入 Eclipse 工作区。

File > Import... > Existing Maven Projects > Root Directory >(导航到教程项目的包含pom.xml的目录)>(检查pom.xml)>完成

不,您将在 Eclipse 中拥有一个项目。 Eclipse 可能会抱怨hibernate3-maven-plugin 的插件目标执行不受支持。 (Eclipse 不知道,如何将这个插件集成到 Eclipse 的构建周期中。)选择“不执行(添加到 pom)”。这将为pom.xml 添加一个“忽略”配置并使Eclipse 满意。

现在用 F5 刷新项目。你就完成了。

可能是 Eclipse 没有一次选择所有内容,因此您可能需要更新 Maven 项目 (Alt+F5)。这就是它现在在我的工作区中的样子:

没有错误,一切就绪。干净整洁。

如果您的数据库设置正确(在persistence.properties 中),并且您已经生成了往返测试,则可以直接执行它(RoundtripTest > Run As > JUnit Test)。这将启动实体管理器、加载 XML、将其保存到数据库、加载回并与原始文件进行比较。

现在我们完成了。

我上面描述的 Maven 项目的导入也绝不是 Hyperjaxb3 特有的。


不,请让我解决您的“逐步”列表:

1.) 下载 zip 2.) 导航到 cmd.exe 中的文件夹 3.) 运行 mvn clean install

好的。

4.) 在eclipse中新建maven项目

为什么是新的?

5.) 将以下内容添加到 pom.xml

不起作用。您必须像我一样找出hbm2ddl 的正确配置。这不是 Hyperjaxb3 专用的。

6.) 在 Eclipse 中运行 Maven 更新项目

好的。

7.) 创建 target/generated-sources/xjc 文件夹

没有。生成目标下的所有内容,您永远不会在那里手动创建任何内容。

8.) 将hyperjaxb生成的文件导入target/generated-sources/xjc

我不明白你在这里的意思。您是否尝试手动复制文件?

9.) 在 eclipse 项目的其他地方创建一个 Main 类来运行测试代码
10.) 开始将教程“使用 JAXB 和 JPA”部分的代码添加到 Main 类

祝你好运,项目成功。

【讨论】:

    【解决方案2】:

    解决方案包括右键单击 eclipse 项目中的各个文件夹,选择Build Path..,然后通过反复试验为各个文件夹选择Use as Source FolderConfigure Build PathRemove from Build Path,以尝试重新创建项目架构所需的构建路径。 lexicore 的答案中的一些概念很有帮助,但最终需要在 Eclipse 中手动更改构建路径,然后应用程序才能在不抛出错误的情况下编组。

    必须有一种方法可以让 hyperjaxb 的架构进化,这样就不需要这些手动步骤。我想更改pom 以正确定义构建路径将是一个短期解决方案。 JAXB 允许将生成的代码导入到 eclipse 中,而无需所有这些手动配置要求,这可能是因为 JAXB jar 中的代码可能与目录结构无关。

    【讨论】:

    • Hyperjaxb 不支持 Eclipse 的说法是不正确且具有误导性的。 Hyperjaxb 只是一个代码生成工具。 Hyperjaxb 的 Maven 项目是完全按照标准 Maven 约定构建的,并且肯定可以在 Eclipse 中工作。将 Hyperjaxb 项目导入 Eclipse 的任务就是将标准 Maven 项目导入 Eclipse 的简单而准确的任务。这只是 Eclipse 中正确和实际的 M2Eclipse 配置以及正确执行现有 Maven 项目的导入的问题。有时它会失败,但它与 Hyperjaxb 或其架构无关。
    • hyperjaxb 体系结构不像 JAXB 体系结构不可知论那样不可知论。因此,JAXB 生成的类可以轻松拖放到任何 eclipse 项目中,而 hyperjaxb 生成的类需要对 eclipse 项目进行复杂的重新配置。这是一个简单的观察,不应该针对个人。放松。这是很有价值的反馈,可以帮助您避免在下一代 JAXB 中将 hyperjaxb 功能简单地替换为更多不可知的升级。无意冒犯。
    • “hyperjaxb 体系结构不像 JAXB 体系结构不可知论那样不可知论。”这是一个虚假的主张。 Hyperjaxb 只是使用 JPA 注释增强了带有 JAXB 注释的类。这与 Eclipse 无关。
    • 当用户可以简单地将hyperjaxb生成的类导入eclipse源文件夹中,将相关依赖项添加到pom.xml文件中,运行maven更新,然后一切都会立即运行就像jaxb 生成的类是不可知的一样。
    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2017-05-31
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多