java - 将hyperjaxb采购订单教程导入Eclipse

标签 java eclipse jaxb hyperjaxb

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


  启动错误:该部分不包含主要类型


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

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


下载压缩文件
导航到cmd.exe中的文件夹
运行MVN全新安装
在Eclipse中创建新的Maven项目
将以下内容添加到pom.xml
在Eclipse中运行Maven更新项目
创建目标/生成源/ xjc文件夹
将hyperjaxb生成的文件导入到
目标/生成源/ xjc
在eclipse项目的其他地方创建Main类以运行测试

从“使用JAXB和JPA”部分开始添加代码
 主类教程


上面的步骤导致上述错误。
要使它在Eclipse中起作用的逐步说明是什么?

最佳答案

好吧,这将是冗长的。

首先,让我们修复我们的起点。在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中用MySQL替换HSQLDB。删除此:

    <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。如果没有注释掉往返测试并且数据库可用,则往返测试应与数据库一起运行,即创建模式,导入示例XML,将其读回并比较alpha和omega。

因此,现在我们有了有关MySQL的教程,可以继续学习。

生成数据库架构

这是一个棘手的部分。

为了在文件中生成数据库模式,必须使用hbm2ddl工具。有Maven插件,在Hibernate 3的情况下,Codehaus插件似乎是领先的插件。最后,我弄清楚了以下配置。您必须将以下插件添加到pom.xmlproject/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工作区即可。

文件>导入...>现有Maven项目>根目录>(导航到包含教程项目的pom.xml的目录)>(检查pom.xml)>完成

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

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

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



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

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

现在我们完成了。

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



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


  1.)下载zip
  2.)导航到cmd.exe中的文件夹
  3.)运行mvn全新安装


好。


  4.)在Eclipse中创建新的Maven项目


为什么要换一个?


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


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


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


好。


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


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


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


我不知道你在这里是什么意思。您是否尝试手动复制文件?


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


祝您好运,并在您的项目中取得成功。

关于java - 将hyperjaxb采购订单教程导入Eclipse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26286055/

相关文章:

java - 验证设计和文档

eclipse - Gradle调试主类

java - JAXB 是否支持内联元素?

java - 在 Web 服务中传递查询参数之间的区别

java - 无法解析 bean driverClassName

java - 组Java开发

java - JAXB:是否可以在没有@XmlJavaTypeAdapter 的情况下使用XmlAdapter?

java - 非类型化元素的 JAXB 自定义绑定(bind)?

java - 使用@KafkaListener 时以编程方式设置属性

java - 如何在 Eclipse 中备份我的 java 项目?