将hyperjaxb采购订单教程导入Eclipse

时间:2014-10-09 19:01:41

标签: java eclipse jaxb hyperjaxb

我想将示例应用从this tutorial导入到eclipse中。我一直收到与文件放置位置有关的错误。当我创建一个Main类来运行教程中的代码时,我得到Eclipse中的编译错误,当Main类在构建路径中时没有看到所需的包,或者我得到了

  

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

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

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

  1. 下载zip
  2. 导航到cmd.exe
  3. 中的文件夹
  4. 运行mvn clean install
  5. 在eclipse中创建新的maven项目
  6. 将以下内容添加到pom.xml
  7. 在eclipse中运行Maven更新项目
  8. 创建目标/ generated-sources / xjc文件夹
  9. 将hyperjaxb生成的文件导入 目标/生成来源/ XJC
  10. 在eclipse项目的其他位置创建一个Main类来运行测试 代码
  11. 开始添加"使用JAXB和JPA"部分  Main类的教程
  12. 上述步骤导致上述错误。 在Eclipse中使用它的步骤说明是什么?

2 个答案:

答案 0 :(得分:5)

好的,这将是漫长的。

首先,让我们来解决我们开始的问题。在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。如果没有注释掉往返测试并且数据库可用,那么roundrip测试应该与DB一起运行,即创建模式,导入示例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工作区。

档案&gt;导入...&gt;现有的Maven项目&gt;根目录&gt; (导航到包含教程项目pom.xml的目录)&gt; (查看pom.xml)&gt;完成

不,你在Eclipse中有一个项目。 Eclipse可能会抱怨hibernate3-maven-plugin执行不受支持的插件目标。 (Eclipse不知道,如何将此插件集成到Eclipse的构建周期中。)选择&#34;不执行(添加到pom)&#34;。这将添加&#34;忽略&#34;配置到pom.xml并让Eclipse开心。

现在用F5刷新项目。而且你已经完成了。

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

Tutorial project in the Eclipse workspace

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

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

现在我们已经完成了。

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


不,请让我一步一步地解决你的问题&#34;列表:

  

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

确定。

  

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.)开始添加&#34;使用JAXB和JPA&#34; Main类的教程部分

祝你在项目上好运并取得成功。

答案 1 :(得分:0)

解决方案包括右键单击eclipse项目中的各个文件夹,选择Build Path..,然后使用反复试验来选择Use as Source FolderConfigure Build PathRemove from Build Path对于各种文件夹,尝试重新创建项目体系结构所需的构建路径。 lexicore的回答中的一些概念是有帮助的,但最终需要在应用程序编组之前在eclipse中手动构建路径更改而不会抛出错误。

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