- 译者序
- 前言
- 本书怎么使用
- 本书排版字体约定
- 本书网站
- 致谢
- 第一部分 Hibernate 快速入门
- 第 1 章 安装和设置
- 第 2 章 映射简介
- 第 3 章 驾驭 Hibernate
- 第 4 章 集合与关联
- 第 5 章 更复杂的关联
- 第 6 章 自定义值类型
- 第 7 章 映射标注
- 第 8 章 条件查询
- 第 9 章 浅谈 HQL
- 第二部分 与其他工具的集成
- 第 10 章 将 Hibernate 连接到 MySQL
- 第 11 章 Hibernate 与 Eclipse:Hibernate Tools 使用实战
- 第 12 章 Maven 进阶
- 第 13 章 Spring 入门:Hibernate 与 Spring
- 第 14 章 画龙点睛:用 Stripes 集成 Spring 和 Hibernate
- 附录 A Hibernate 类型
- 附录 B Criteria API
- 附录 C Hibernate SQL 方言
- 附录 D Spring 事务支持
- 附录 E 参考资源
- 作者简介
- 封面介绍
项目的构建、测试以及运行
假设你已经从本书的网站( [1] )下载好了示例代码,这时应该转到 ch12 示例目录,运行 mvn test 命令。运行结果如图 12-2 所示。
例 12-2:告诉 Maven 测试我们的项目
$mvn test
[INFO]Scanning for projects……❶
[INFO]-------------------------------------------------------------------------
---
[INFO]Building Harnessing Hibernate:Chapter Twelve:Maven
[INFO]
task-segment:[test]
[INFO]-------------------------------------------------------------------------
---
[INFO][resources:resources]
[INFO]Using default encoding to copy filtered resources.
[INFO][compiler:compile]❷
[INFO]Compiling 9 source files to~\examples\ch12\target\classes
[INFO]Preparing hibernate3:hbm2ddl
[WARNING]Removing:hbm2ddl from forked lifecycle, to prevent recursive
invocation.
[INFO][resources:resources]
[INFO]Using default encoding to copy filtered resources.
[INFO][hibernate3:hbm2ddl{execution:generate-ddl}]❸
[INFO]Configuration XML file loaded:
~/examples/ch12/src/main/resources/hibernate.cfg.xml
20:16:05,580 INFO org.hibernate.cfg.annotations.Version-Hibernate
Annotations 3.2.0.GA
20:16:05,595 INFO org.hibernate.cfg.Environment-Hibernate 3.2.0.cr5
20:16:05,598 INFO org.hibernate.cfg.Environment-hibernate.properties
not found
20:16:05,599 INFO org.hibernate.cfg.Environment-Bytecode provider name
:cglib
20:16:05,603 INFO org.hibernate.cfg.Environment-using JDK 1.4 java.sql
.Timestamp handling
[INFO]Configuration XML file loaded:
~/examples/ch12/src/main/resources/hibernate.cfg.xml
20:16:05,684 INFO org.hibernate.cfg.Configuration-configuring from url:
~/examples/ch12/src/main/resources/hibernate.cfg.xml
20:16:05,808 INFO org.hibernate.cfg.Configuration-Configured SessionFactory:
null
(schema export omitted)
20:16:07,172 INFO org.hibernate.tool.hbm2ddl.SchemaExport-schema export
complete
20:16:07,173 INFO org.hibernate.connection.DriverManagerConnectionProvider
-cleaning up connection pool:jdbc:hsqldb:data/music
[INFO][resources:testResources]
[INFO]Using default encoding to copy filtered resources.
[INFO][compiler:testCompile]❹
[INFO]Compiling 2 source files to~\examples\ch12\target\test-classes
20:16:08,194 INFO org.hibernate.connection.DriverManagerConnectionProvider
-cleaning up connection pool:jdbc:hsqldb:data/music
[INFO][surefire:test]❺
[INFO]Surefire report directory:~\examples\ch12\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.oreilly.hh.ArtistTest
Hibernate:insert into ARTIST(ARTIST_ID, actualArtist_ARTIST_ID, NAME)
values(null,?,?)
Hibernate:call identity()
Tests run:1,Failures:0,Errors:0,Skipped:0,Time elapsed:1.345 sec
Results:
Tests run:1,Failures:0,Errors:0,Skipped:0
这个命令进行了很多活动,我们来看看刚才发生了什么:
❶首先,mvn test 是什么意思?在命令行中,我们调用 Maven,并向它传递 Maven 构建生命周期(Maven Build Lifecycle)中目标阶段的名称。Maven 构建生命周期是 Maven 在构建项目时经历的一组阶段。在生命周期的各个阶段中,需要为了执行而注册不同的插件:在编译阶段要对代码进行编译,在测试阶段要执行各种测试,在打包阶段要创建 JAR 包。有关 Maven 构建生命周期各阶段的完整列表,可以参阅本章后面的“Maven 构建的生命周期”一节。
❷要到达测试阶段,必须先通过编译阶段。在编译阶段需要注册并运行 Maven Compiler 插件。Maven 插件是由不同的目标(goal)组成的,我们可以看到执行了编译目标,编译了 9 个源文件,生成的字节码文件放到了 target/classes 中。我们如何判断编译器插件已经执行了编译目标?[compiler:compile]告诉我们这一信息,在 Maven 的输出中,你会看到很多类似的信息。冒号之前的字符串部分是插件标识符(plug-in identifier),之后是正在被执行的目标标识符(goal identifier)。注意,compiler:compile 下面几行有一条警告性质的日志语句,目前你可以放心地忽略它。
❸接着,我们可以看到正在执行的是 Hibernate3 插件的 hbm2ddl 目标。这个插件不是默认插件,必须在 Maven 中明确地添加这个插件,不过,不必为它提供很多配置。这个插件假设 hibernate.cfg.xml 位于 src/main/resources 目录中。我们将在后面的“使用 Maven Hibernate3 插件”一节中详细地介绍 Hibernate3 Maven 插件。
❹接着,编译单元测试。编译器插件有一个名为 testCompile 的目标。编译好的测试字节码保存在 target/test-classes 目录中。
❺最后,Surefire 插件执行 test 目标,在生成的测试类中寻找扩展自 JUnit 的 TestCase 类的测试类。在这个例子中,我们编写了一个简单的 JUnit 测试,向 ARTIST 表插入一个测试值。
Maven 刚才在幕后的操作就是编译源代码、创建一个 HSQLDB 数据库、编译单元测试、运行一个单元测试以便在数据库中插入一行数据。如果你想重复该示例,删除数据目录或单元测试将导致向数据库中插入一行数据时会失败,因为这样会违反在艺人名称上施加的惟一性约束限制条件。为了清除掉整个项目,应该运行 mvn clean 命令:
$mvn clean
[INFO]Scanning for projects……
[INFO]-------------------------------------------------------------------------
---
[INFO]Building Harnessing Hibernate:Chapter Twelve:Maven
[INFO]
task-segment:[clean]
[INFO]-------------------------------------------------------------------------
---
[INFO][clean:clean]
[INFO]Deleting directory~\examples\ch12\target
[INFO]Deleting directory~\examples\ch12\target\classes
[INFO]Deleting directory~\examples\ch12\target\test-classes
[INFO]Deleting directory~\examples\ch12\target\site
如果你打算在其他项目中也利用这个项目的类,你可能希望生成一个 JAR 文件,并将其保存在类路径中。为了生成一个 JAR,应该运行 mvn package 命令:
$mvn package
[INFO]Scanning for projects……
[INFO]-------------------------------------------------------------------------
---
[INFO]Building Harnessing Hibernate:Chapter Twelve:Maven
[INFO]task-segment:[package]
[INFO]-------------------------------------------------------------------------
---
……skipping output……
[INFO][jar:jar]
[INFO]Building jar:~\examples\ch12\target\hib-dev-ch12-2.0-SNAPSHOT.jar
我们对这个示例的输出进行了大量删减,因为它与前面的 mvn test 的输出差不多是一样的。在此之后是 Jar 插件的 jar 构建目标的输出,我们显示了这一内容。Jar 插件绑定到了 Maven 构建生命周期的打包阶段,它创建了一个名为 hib-dev-ch12-2.0-SNAPSHOT.jar 的 JAR 目标 artifact。
[1] http://www.oreilly.com/catalog/9780596517724/.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论