返回介绍

项目的构建、测试以及运行

发布于 2025-04-21 21:42:15 字数 5787 浏览 0 评论 0 收藏 0

假设你已经从本书的网站( [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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。