什么类型的Hibernate教程的新项目?

时间:2012-12-17 16:40:22

标签: eclipse hibernate maven

我正在尝试遵循这个Hibernate教程:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/tutorial.html

这看起来很简单&直截了当,但我坚持第一个决定点:选择File> New Project要使用教程的建议pom.xml哪个我应该选择多种类型的项目?

直观地说,我想到了创建一个新的Maven项目:

  1. Maven> Maven Project [下一页]
  2. [v] Create a simple project (skip archtype selection) [下一步]
  3. 但是在第3步,它会提示我输入教程pom.xml提供的相同信息。所以我认为本教程的目的是创建一个“空白项目”,然后手动将建议的pom.xml添加到其中?

    但那会是什么类型的“空白项目”?

    • 爪哇?
    • 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依赖项的版本号。 “我”,因为它是缺少它们的教程(这是什么类型的教程?)

    一旦我使用了一些已知的版本号,例如:

    <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 ,现在一切都很顺利。

    经验教训:

    1. Maven的pom.xml需要<version>每个&amp;每一个依赖。
    2. <version>的值必须有效。
    3. 创建一个新的Maven项目,然后完全替换它的pom.xml会起作用,但它仍然使用Workspace下的不正确的子目录创建它,因为无法在基于向导的创建过程中定义<name>
    4. 创建普通Java Project,然后将pom.xml添加到其目录,然后刷新Package Explorer视图是推荐的方法(不需要子目录重命名)。
    5. 该教程推荐使用Maven的“标准布局”,然后使用声明的包“org.hibernate.tutorial.domain”将其打破,该包与预期的包“main.java.org.hibernate.tutorial.domain”不匹配。 .. 将Eclipse的修复建议重命名为“main.java.org.hibernate.tutorial.domain”。 (并将Event.java移动到新重命名的包中!)
    6. 必须从pom.xml所在的目录运行Hibernate configuration commandmvn exec:java -Dexec.mainClass="org.hsqldb.Server"等)。

1 个答案:

答案 0 :(得分:2)

最简单的方法是创建一个新的maven项目并使用maven-archetype-quickstart原型。

这将创建一个基本的maven项目,你应该可以从那里开始。

请注意,maven项目只是一个使用Maven构建它的Java项目,因此您将在项目中看到一个pom.xml文件。

使用这个pom文件,您可以构建项目,包括外部依赖项等等。如果您正在使用eclipse进行开发以帮助您更好地管理maven项目,我建议使用m2e插件:http://eclipse.org/m2e/

您指定的每个依赖项都应具有与之关联的版本号。

e.g。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.5.6-Final</version>
    </dependency>   
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>

要获得正确的版本号,只需google artifactid maven依赖。例如。 hibernate-core maven依赖。

查找maven中央存储库的链接 - 即http://mvnrepository.com。如果你无法在谷歌上找到它,你可以直接在网站上搜索,但我觉得它的搜索功能很差。

将您的Java代码放在src/main/java中,将您的资源放在src/main/resources中(例如xml文件等)。

然后,您可以使用mvn clean install

构建项目