0

このチュートリアルのサンプル アプリを Eclipseにインポートしたいと思います。ファイルの配置場所に関連するエラーが発生し続けます。チュートリアルのコードを実行するために Main クラスを作成すると、Main クラスがビルド パスにあるときに必要なパッケージが表示されない Eclipse からコンパイル エラーが発生するか、

起動エラー: セクションにメイン タイプが含まれていません

Main クラスがビルド パスにない場合。

これまでのところ、次の手順を実行しました。

  1. ダウンロードzip
  2. cmd.exe のフォルダーに移動します。
  3. mvn clean install を実行します
  4. Eclipse で新しい Maven プロジェクトを作成する
  5. 以下を pom.xml に追加します
  6. Eclipse で Maven 更新プロジェクトを実行する
  7. target/generated-sources/xjc フォルダーを作成する
  8. hyperjaxb によって生成されたファイルを target/generated-sources/xjc にインポートします。
  9. Eclipse プロジェクトの別の場所にメイン クラスを作成して、テスト コードを実行します。
  10. チュートリアルの「JAXB および JPA の操作」セクションのコードを Main クラスに追加し始めます。

上記の手順を実行すると、上記で説明したエラーが発生します。 これをEclipseで動作させるための段階的な手順は何ですか?

4

2 に答える 2

5

わかりました、これは長くなります。

まず、どこから始めるかを修正しましょう。この質問では、チュートリアルが正常に機能していることを最終的に把握しました。生成された Java コードを見つけるのにいくつかの困難がありました。

補足として、このチュートリアルは、maven-hyperjaxb3-plugin. Maven の標準的な規則では、コードを で生成しますtarget\generated-sources\myTool。JAXB のコード生成ツールは XJC と呼ばれるため、スキーマから派生したコードの標準規約はtarget\generated-sources\xjc. maven-jaxb2-pluginそれもします。

したがって、これからは、PO チュートリアルがうまく機能したと仮定します。コードが生成され、ラウンドトリップ テストが HSQLDB データベースで実行されたなどです。

あなたが今求めているのは、基本的に3つのことです:

  • MySQL に切り替えるには?
  • hbm2ddl でデータベース スキーマを生成するには?
  • プロジェクトをEclipseにインポートする方法は?

これは、Hyperjaxb に固有のものではないことに注意してください。

始めましょう。

MySQL への切り替え

まず最初に、 で HSQLDB を MySQL に置き換える必要がありますpom.xml。これを削除します:

    <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/ユーザー名/パスワードを構成するだけです。

この時点で、MySQL を使用するように Maven プロジェクトが再構成されます。ラウンドトリップ テストがコメント アウトされておらず、データベースが利用可能な場合、ラウンドリップ テストは DB で実行する必要があります。つまり、スキーマを作成し、サンプル XML をインポートし、それを読み返し、アルファとオメガを比較します。

これで、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です。これが 2 番目の質問でした。

これで Maven プロジェクトは完了です。Eclipse に切り替えましょう。

プロジェクトを Eclipse にインポートする

私が個人的に理解していないのは、

8.) hyperjaxb によって生成されたファイルを target/generated-sources/xjc にインポートします。

Hyperjaxb3 は、このディレクトリ (パッケージ内) に Java ファイルを生成するだけです。したがって、どこにも何もインポートしません。ファイルを手動でコピーしようとしないでください。

これを行う正しい方法は、Eclipse で標準の m2e プラグインを使用し、Maven プロジェクトを Eclipse ワークスペースにインポートするだけです。

pom.xml[ファイル] > [インポート...] > [既存の Maven プロジェクト] > [ルート ディレクトリ] > (チュートリアル プロジェクトを含むディレクトリに移動) > (オンにチェックpom.xml) > [完了]

いいえ、Eclipse でプロジェクトを作成します。Eclipse は、サポートされていないプラグイン ゴールの実行についておそらく文句を言うでしょうhibernate3-maven-plugin。(Eclipse は、このプラグインを Eclipse のビルド サイクルに統合する方法を知りません。) [実行しない (pom に追加)] を選択します。これにより、「無視」構成が に追加され、pom.xmlEclipse が満足するようになります。

F5 でプロジェクトを更新します。これで完了です。

Eclipse が一度にすべてを選択しなかった可能性があるため、Maven プロジェクトを更新する必要があるかもしれません (Alt+F5)。これは、現在私のワークスペースでどのように見えるかです:

Eclipse ワークスペースのチュートリアル プロジェクト

エラーはありません。すべてが整っています。素敵できれい。

データベースが ( で) 正しく設定されていてpersistence.properties、ラウンドトリップ テストを生成している場合は、それを直接実行できます ([RoundtripTest] > [Run As] > [JUnit Test])。これにより、エンティティ マネージャーが起動し、XML が読み込まれ、DB に保存され、再度読み込まれ、元のものと比較されます。

これで完了です。

上で説明した Maven プロジェクトのインポートも、Hyperjaxb3 固有のものではありません。


いいえ、「ステップバイステップ」リストに対処させてください。

1.) zip をダウンロード 2.) cmd.exe のフォルダーに移動 3.) mvn clean install を実行

Ok。

4.) Eclipse で新しい Maven プロジェクトを作成する

なぜ新しいのですか?

5.) 以下を pom.xml に追加します。

動作しません。hbm2ddl私と同じように、の正しい構成を理解する必要がありました。これは Hyperjaxb3 固有のものではありません。

6.) Eclipse で Maven 更新プロジェクトを実行する

Ok。

7.) target/generated-sources/xjc フォルダーを作成する

いいえ。ターゲットの下にあるものはすべて生成されます。そこで手動で作成することはありません。

8.) hyperjaxb によって生成されたファイルを target/generated-sources/xjc にインポートします。

ここで何を言っているのかわかりません。ファイルを手動でコピーしようとしていましたか?

9.) テスト コードを実行するために、Eclipse プロジェクトの別の場所にメイン クラスを作成します

あなたのプロジェクトの幸運と成功を祈っています。

于 2014-10-09T23:27:39.980 に答える
0

ソリューションには、Eclipse プロジェクト内のさまざまなフォルダーを右クリックし、プロジェクトのアーキテクチャで必要なビルド パスを再作成するためにBuild Path..、試行錯誤を使用してUse as Source FolderConfigure Build Path、またはさまざまなフォルダーのいずれかを選択することが含まれていました。Remove from Build Pathlexicore's answer の概念の一部は役に立ちましたが、最終的には、アプリがエラーをスローせずにマーシャリングできるようになる前に、Eclipse でビルド パスを手動で変更する必要がありました。

これらの手動の手順が不要になるように、hyperjaxb のアーキテクチャを進化させる方法が必要です。を変更してビルドパスpomを適切に定義することは、短期的な解決策になると思います。JAXB では、おそらく JAXB jar 内のコードがディレクトリー構造に関して不可知である可能性があるため、生成されたコードをこれらすべての手動構成要件なしで Eclipse にインポートすることができます。

于 2014-10-13T16:46:33.907 に答える