私はこのHibernateチュートリアルに従おうとしています:
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/tutorial.html
これは非常に簡単でわかりやすいように見えますが、最初の決定点に固執しました。チュートリアルで提案されているpom.xmlを使用するためにFile
>を選択する場合、多くの種類のプロジェクトのどれを選択する必要がありますか?New Project
直感的に、私は新しいMavenプロジェクトを作成することを考えました。
Maven
>Maven Project
[次へ][v] Create a simple project (skip archtype selection)
[次]
しかし、ステップ3では、チュートリアルのpom.xmlによって提供されるのとまったく同じ情報の入力を求められます。チュートリアルは「空白のプロジェクト」を作成し、提案されたpom.xmlを手動で追加することを目的としていると思いますか?
しかし、それはどのような種類の「空白のプロジェクト」でしょうか?
- Java?
- Java EE?
- EJB?
- JAXB?
- JPA?
- Maven?
- それは重要ですか?
(申し訳ありませんが、この新しい専門用語については(まだ)あまり経験がありませんが、最終的にはそこに到達します)
更新1:実際には、Mavenプロジェクトを選択するための提案された方法(偽の情報から開始するか正しい情報から開始するかに関係なく)は機能しません:
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).
Project ID: org.hibernate.tutorials:hibernate-tutorial
POM Location: C:\Users\Daniel\Workspace\First Hibernate Tutorial\pom.xml
Validation Messages:
[0] 'dependencies.dependency.version' is missing for org.hibernate:hibernate-core:jar
[1] 'dependencies.dependency.version' is missing for javax.servlet:servlet-api:jar
[2] 'dependencies.dependency.version' is missing for org.slf4j:slf4j-simple:jar
[3] 'dependencies.dependency.version' is missing for javassist:javassist:jar
Reason: Failed to validate POM for project org.hibernate.tutorials:hibernate-tutorial at C:\Users\Daniel\Workspace\First Hibernate Tutorial\pom.xml
ここで、プレーンJavaプロジェクトを作成し、それをMavenに変換して(そのチュートリアルのpom.xmlをコピーした後)うまくいくかどうかを確認します。
更新2:プレーンJavaプロジェクトを作成し、それをMavenに変換すると(そのチュートリアルのpom.xmlをコピーした後)、同じエラーが発生します。
私は何が欠けていますか?
更新3:以下の@cowlsのヒントのおかげで、Mavenの依存関係のバージョン番号が「I」が欠落していることがわかりました。「私」はそれらが欠けていたチュートリアルだからです(これはどのようなチュートリアルですか?)
いくつかの既知のバージョン番号を使用した後、例:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.5.6-Final</version>
</dependency>
<!-- Because this is a web app, we also have a dependency on the servlet api. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>1.2_02</version>
</dependency>
<!-- Hibernate uses slf4j for logging, for our purposes here use the simple backend -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.5.10</version>
</dependency>
<!-- Hibernate gives you a choice of bytecode providers between cglib and javassist -->
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.8.0.GA</version>
</dependency>
</dependencies>
私はその恐ろしい致命的なエラーメッセージを取り除くことができました。そのエラーメッセージの「ヒント」BTWは、間違った方向を指しているため、逆効果でした。
[INFO] Error building POM (may not be this project's POM).
今...私はまだビルドエラーが発生していますが、それほど怖くはありません:
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building First Hibernate Tutorial
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\Users\dben\ws-study\First Hibernate Tutorial\src\main\resources
Downloading: http://repo1.maven.org/maven2/javax/servlet/servlet-api/1.2_02/servlet-api-1.2_02.pom
[INFO] Unable to find resource 'javax.servlet:servlet-api:pom:1.2_02' in repository central (http://repo1.maven.org/maven2)
Downloading: http://repo1.maven.org/maven2/javax/servlet/servlet-api/1.2_02/servlet-api-1.2_02.jar
[INFO] Unable to find resource 'javax.servlet:servlet-api:jar:1.2_02' in repository central (http://repo1.maven.org/maven2)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) javax.servlet:servlet-api:jar:1.2_02
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=javax.servlet -DartifactId=servlet-api -Dversion=1.2_02 -Dpackaging=jar -Dfile=/path/to/file
Alternatively, if you host your own repository you can deploy the file there:
mvn deploy:deploy-file -DgroupId=javax.servlet -DartifactId=servlet-api -Dversion=1.2_02 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
Path to dependency:
1) org.hibernate.tutorials:hibernate-tutorial:jar:1.0.0-SNAPSHOT
2) javax.servlet:servlet-api:jar:1.2_02
----------
1 required artifact is missing.
for artifact:
org.hibernate.tutorials:hibernate-tutorial:jar:1.0.0-SNAPSHOT
from the specified remote repositories:
central (http://repo1.maven.org/maven2)
興味深いチュートリアル:Hibernateを学ぶことを期待していましたが、代わりにMavenを学んでいます。:)
更新4:javax.servlet
バージョンを2.4 に修正しましたが、すべて順調です。
学んだ教訓:
- Mavenのpom.xmlには、
<version>
依存関係ごとにが必要です。 - その
<version>
値は有効である必要があります。 - 新しいMavenプロジェクトを作成し、そのpom.xmlを完全に置き換えることは機能しますが
<name>
、ウィザードベースの作成プロセスでを定義する方法がないため、Workspaceの下の誤ったサブディレクトリでプロジェクトを作成します。 - プレーンを作成し、そのディレクトリに
Java Project
を追加してpom.xml
から、パッケージエクスプローラービューを更新することをお勧めします(サブディレクトリの名前を変更する必要はありません)。 - このチュートリアルでは、Mavenの「標準レイアウト」を推奨していますが、宣言されたパッケージ「org.hibernate.tutorial.domain」を使用してそれを破っています。これは、期待されるパッケージ「main.java.org.hibernate.tutorial.domain」と一致しません。 Eclipseの修正提案に従って、パッケージの名前を「main.java.org.hibernate.tutorial.domain」に変更します。(そして、Event.javaを新しく名前が変更されたパッケージに移動します!)
- Hibernate構成コマンド(など)は
mvn exec:java -Dexec.mainClass="org.hsqldb.Server"
、pom.xmlが存在するディレクトリーから実行する必要があります。