我正在尝试遵循这个 Hibernate 教程:
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/tutorial.html
这似乎很容易且直接,但是我被困在第一个决策点上:选择File
>New Project
使用教程建议的pom.xml时,我应该选择多种类型的项目中的哪种?
直觉上,我想到了创建一个新的 Maven 项目:
Maven
>Maven Project
[下一个][v] Create a simple project (skip archtype selection)
[下一个]
但在第 3 步,它会提示我提供与教程的pom.xml完全相同的信息。所以我认为本教程旨在创建一个“空白项目”,然后手动将建议的 pom.xml 添加到其中?
但那会是什么类型的“空白项目”?
- 爪哇?
- Java EE?
- EJB?
- JAXB?
- JPA?
- 马文?
- 有关系吗?
(对不起,对这个新术语没有太多经验(还),最终会到达那里)
更新 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 提示,我发现缺少“I”是 Maven 依赖项的版本号。“我”是因为缺少他们的教程(这是什么教程?)
一旦我使用了一些已知的版本号,例如:
<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>
我已经能够摆脱那个可怕的 FATAL ERROR 消息。该错误消息的“提示” 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>
for each & every 依赖项。 - 那
<version>
的价值必须是有效的。 - 创建一个新的 Maven 项目,然后完全替换它的 pom.xml 是可行的,但它仍然使用 Workspace 下的不正确子目录创建它,因为无法
<name>
在基于向导的创建过程中定义它。 - 创建一个plain
Java Project
,然后将其添加pom.xml
到其目录,然后刷新Package Explorer 视图是推荐的方式(无需重命名子目录)。 - 该教程推荐了 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 所在的目录运行。