使用Ant进行Java开发PDF电子书下载
- 电子书积分:18 积分如何计算积分?
- 作 者:(美)Erik Hatcher,(美)Steve Loughran著;刘永丹,陈洋译
- 出 版 社:北京:电子工业出版社
- 出版年份:2005
- ISBN:7121016834
- 页数:634 页
Part 1 学习Ant 1
1.1 何为Ant 3
第1章 Ant简介 3
1.1.2 为什么我们认为Ant是一个优秀的构建工具 4
1.1.1 何为构建过程,我们为什么需要它 4
1.2 Ant的核心概念 5
1.2.1 示例工程 7
1.3.1 集成开发环境 10
1.3 为什么要使用ANT 10
1.3.2 Make 11
1.3.3 其他构建工具 13
1.4 Ant的演化史 14
1.3.4 立刻就来运行吧 14
1.5.1 XP(eXtreme Programming) 16
1.5 Ant与软件开发方法 16
1.6 示例工程 17
1.5.2 Rational统一过程 17
1.6.1 文档搜索引擎—Ant示例工程 18
1.7 太棒了,可是ANT能否 19
1.8.3 Microsoft.NET以及其他语言 21
1.8.2 简单的工作流引擎 21
1.8 超越JAVA开发 21
1.8.1 Web发布引擎 21
1.9 小结 22
2.1 定义我们的第一个工程 23
第2章 开始Ant之旅 23
2.3 第二步:编写你的第一个Ant构建文件 24
2.2 第一步:检查工具是否已经就绪 24
2.3.1 测试构建文件 25
2.4 第三步:运行你的第一个构建 26
2.4.1 如果构建失败 27
2.4.2 查看更多构建细节 29
2.5 第四步:强制结构 31
2.5.1 布置源文件路径 32
2.5.2 布置构建目录 33
2.5.3 布置发布目录 34
2.5.5 目标依赖 35
2.5.4 创建构建文件 35
2.5.6 运行新的构建文件 36
2.5.7 重新运行构建 37
2.5.8 Ant如何处理命令行上的多个目标 38
2.6.1 为什么要在Ant内部运行 39
2.6 第五步:运行我们的程序 39
2.6.3 运行新的目标 40
2.6.2 添加执行目标 40
2.7 ANT命令行选项 41
2.7.2 控制所提供的信息量 42
2.7.1 指定要运行的构建 42
2.8 最终的构建文件 44
2.7.3 获取项目信息 44
2.9 小结 46
第3章 理解Ant的datatypes和特性 47
3.1.2 特性概述 48
3.1.1 Datatype概述 48
3.1 入门 48
3.2 通过〈JAVAC〉介绍DATATYPE和特性 49
3.3 路径(Path) 51
3.4 文件集(Fileset) 52
3.4.2 默认排除项(Default excludes) 53
3.4.1 文件集举例 53
3.5 模式集(Patternset) 54
3.6 选择器(Selector) 56
3.7 DATATYPE元素命名 57
3.8.1 构建运行时在文件中插入日期戳 58
3.8 过滤集(Filterset) 58
3.9 过滤链(filterchain)和过滤阅读器(FilterReader) 59
3.10.1 Identity映射器 61
3.10 Mapper 61
3.10.3 Merge映射器 62
3.10.2 Flatten映射器 62
3.10.5 Regexp映射器 63
3.10.4 Glob映射器 63
3.10.6 Package映射器 64
3.11.3 Filelist 65
3.11.2 Dirset 65
3.11 其他ANT DATATYPE 65
3.11.1 ZipFileset 65
3.12 特性(Property) 66
3.11.4 ClassFileset 66
3.12.1 通过〈property〉任务设置特性 67
3.12.3 检查资源的可用性:〈available〉 70
3.12.2 〈property〉任务怎样区别于其他任务 70
3.12.5 用〈condition〉测试条件 72
3.12.4 忽略不必要的步骤:〈uptodate〉以节省时间 72
3.12.6 在命令行中设置特性 74
3.12.7 用〈tstamp〉创建构建的时间戳 75
3.12.8 从XML文件中载入特性 76
3.13.1 有条件地执行target 77
3.13 使用特性控制Ant 77
3.13.3 有条件的构建失败 78
3.13.2 有条件的patternset包含/排除(inclusion/exclusion) 78
3.14 引用 79
3.14.1 特性和引用 80
3.14.2 为嵌套的模式集使用引用 81
3.15 最佳实践 82
3.16 小结 83
第4章 使用JUnit进行测试 85
4.2 JAVA MAIN()测试 86
4.1 重构(Refactoring) 86
4.3 JUNIT入门 87
4.3.3 断言预期的结果 88
4.3.2 运行测试用例 88
4.3.1 编写测试用例 88
4.3.5 编写测试组件 90
4.3.4 测试用例生命周期 90
4.3.7 扩展JUnit 91
4.3.6 获取及安装JUnit 91
4.4.1 先编写测试 92
4.4 在我们的应用程序中使用单元测试 92
4.4.2 在测试过程中处理外部资源 93
4.5.1 组织目录以安放测试 94
4.5 JUNIT任务—〈JUNIT〉 94
4.5.2 配置JUnit到构建过程 95
4.6.1 捕获测试结果 97
4.6 测试失败意味着构建失败 97
4.6.2 运行多重测试 99
4.7 生成测试结果报告 100
4.6.3 创建你自己的结果(result)formatter 100
4.7.1 生成报告且允许当测试失败时中止构建 102
4.7.3 初始化测试环境 103
4.7.2 从命令行运行单个测试用例 103
4.7.4 其他测试问题 104
4.8 短路测试 105
4.8.1 处理大量测试 108
4.9 最佳实践 109
4.10 小结 110
5.1 为什么需要运行外部程序 111
第5章 运行程序 111
5.2 运行JAVA程序 112
5.2.1 介绍〈java〉任务 113
5.2.2 设置classpath 114
5.2.3 参数 115
5.2.4 定义系统特性 116
5.2.5 在新JVM中运行程序 117
5.2.7 控制新JVM 118
5.2.6 设置环境变量 118
5.2.8 使用failonerror处理错误 119
5.2.9 执行JAR文件 120
5.2.10 调用第三方程序 121
5.2.11 在调用之前探查Java程序 123
5.3 使用〈EXEC〉启动本地程序 124
5.2.12 设置超时 124
5.3.2 处理错误 126
5.3.1 设置环境变量 126
5.3.4 制作并运行一个shell命令 127
5.3.3 处理超时 127
5.3.5 在程序被调用之前进行探测 129
5.4 使用〈apply〉进行批量执行 130
5.5 处理输出 131
5.7 最佳实践 132
5.6 执行的限制 132
5.8 小结 133
第6章 工程打包 134
6.1.1 如何删除文件 135
6.1 移动、复制和删除文件 135
6.1.2 怎样复制文件 136
6.1.3 如何移动文件 137
6.1.4 过滤 138
6.2.1 构建发布代码及其文档 139
6.2 为打包做准备 139
6.2.2 加入数据文件 141
6.2.3 准备编制文档 142
6.2.4 准备安装脚本和文档 143
6.2.5 为重发布准备库 145
6.3 创建存档文件 146
6.3.2 创建一个JAR文件 148
6.3.1 JAR文件 148
6.3.3 测试JAR文件 149
6.3.4 创建JAR清单 150
6.3.7 签署JAR文件 152
6.3.6 JAR文件的最佳实践 152
6.3.5 向JAR中增加额外元数据 152
6.4.1 创建二进制发布 154
6.4 创建ZIP文件 154
6.4.2 创建源代码发布 156
6.4.4 Zip文件的最佳实践 157
6.4.3 合并Zip文件 157
6.5 创建TAR文件 158
6.6 使用WAR文件创建WEB应用程序 160
6.7 打包测试 161
6.8 小结 162
第7章 部署 163
7.1.2 部署所用的工具 164
7.1.1 再看这些任务 164
7.1 典型部署问题 164
7.2 用于部署的任务 165
7.2.2 探测服务器的有效性 166
7.2.1 使用〈ftp〉进行文件传输 166
7.2.3 使用〈sleep〉让构建暂停 168
7.2.4 Ant的email任务 169
7.2.5 使用〈get〉获取远程文件 170
7.3 基于FTP的打包应用程序发布 171
7.2.6 使用任务进行部署 171
7.3.1 通过〈input〉任务获得信息 172
7.4 基于Email的打包应用程序发布 173
7.5 本地部署到Tomcat4.x 174
7.5.1 Tomcat的管理servlet API 175
7.5.2 使用Ant部署到Tomcat 176
7.6 远程部署到Tomcat 181
7.6.1 插曲:使用〈antcall〉调用目标 182
7.6.2 在部署中使用〈antcall〉 185
7.8 小结 187
7.7 对部署进行测试 187
8.1 我们目前的应用程序 188
第8章 综合运用Ant 188
8.2 构建定制的Ant任务库 189
8.3 载入跨工程的共用特性 194
8.4 处理版本依赖 196
8.4.1 安装库的新版本 198
8.5.4 使其可移植 200
8.5.3 支持自动部署 200
8.5 构建文件的哲学 200
8.5.1 一开始就要把结果放在心上 200
8.5.2 将测试纳入构建 200
8.6 小结 201
8.5.5 允许用定制 201
Part 2 应用Ant 203
第9章 在开发项目中使用Ant 205
9.1.1 分析你的项目 206
9.1 设计基于Ant的构建过程 206
9.1.3 完善构建文件 208
9.1.2 建立核心构建文件 208
9.2 移植到ANT 209
9.3 移植的十个步骤 210
9.3.2 从基于IDE的项目移植 211
9.3.1 从基于Make的项目移植 211
9.4.1 重构构建文件 212
9.4 主构建:管理大型项目 212
9.4.3 示例:基本主构建文件 213
9.4.2 引入〈ant〉任务 213
9.4.4 设计可升级的灵活主构建文件 215
9.5.1 如何控制子工程的特性 221
9.5 管理子工程构建 221
9.5.2 从主构建文件中继承特性和引用 223
9.5.3 在〈ant〉里声明特性和引用 224
9.5.4 通过XML文件片断共享特性 225
9.5.5 使用XML文件片断共享目标 227
9.6 创建可重用的库构建文件 228
9.7 展望未来:让大型项目支持演化 230
9.8 ANT项目的最佳实践 231
9.8.2 实现过程 232
9.8.1 管理库 232
9.9 小结 233
第10章 超越Ant的核心任务 234
10.1.1 那么,什么是“可选”任务 235
10.1 理解任务的种类 235
10.1.2 Ant的主要可选任务 236
10.2.1 操控特性文件 237
10.2 可选任务实际演练 237
10.1.3 为什么需要第三方任务 237
10.2.2 为构建期间添加音频反馈和视觉反馈 239
10.2.3 添加依赖关系检查 241
10.2.4 用JavaCC进行语法解析 243
10.2.5 置换正则表达式 244
10.3.1 CVS 245
10.3 使用软件配置管理任务 245
10.3.2 ClearCase 246
10.4.1 用〈taskdef〉定义任务 247
10.4 使用第三方任务 247
10.5.1 Checkstyle 248
10.5 几个知名的第三方任务 248
10.5.2 Torque—对象-关系映射 250
10.6 ANT-CONTRIB任务 253
10.7 项目间共享任务定义 258
10.8 最佳实践 258
10.9 小结 259
第11章 XDoclet 260
11.2 生成TO-DO列表 261
11.1 安装XDoclet 261
11.3 XDoclet的体系结构 262
11.3.1 XDoclet的Ant任务 263
11.3.2 模板化 264
11.4 编写自己的XDoclet模板 265
11.3.3 XDoclet如何工作 265
11.4.1 代码生成 267
11.4.2 按类生成与单文件生成的比较 272
11.5 高级XDoclet 273
11.4.3 过滤要处理的类 273
11.5.2 建立定制标记处理器 274
11.5.1 定制子任务 274
11.6.1 XDoclet与C#的比较 275
11.6 XDoclet的发展方向 275
11.7.1 依赖关系检查 276
11.7 XDoclet最佳实践 276
11.6.2 展望Java的未来:JSR175和JSR181 276
11.8 小结 277
第12章 web开发 278
12.1 WEB应用程序有什么不同 279
12.2.1 建立标记库 280
12.2 使用标记库 280
12.2.2 集成标记库 286
12.2.3 使用Ant开发标记库小结 287
12.3 编译JSP网页 288
12.3.2 使用〈jspc〉任务 289
12.3.1 安装〈jspc〉任务 289
12.3.3 为部署而编译JSP 291
12.4.1 基于filterset的定制 292
12.4 定制web应用程序 292
12.3.4 其他JSP编译任务 292
12.4.2 利用XDoclet定制部署描述文件 294
12.5.1 生成新内容 297
12.5 生成静态内容 297
12.4.3 定制WAR文件中的库 297
12.5.2 建立新文件 298
12.6 使用HTTPNIT测试WEB应用程序 299
12.5.3 修改既有文件 299
12.6.1 编写HttpUnit测试 300
12.6.2 编译测试 302
12.6.4 运行HttpUnit测试 303
12.6.3 准备从Ant中运行HttpUnit测试 303
12.6.5 整合测试 304
12.6.7 Canoo WebTest 306
12.6.6 HttpUnit的局限性 306
12.7 利用CACTUS进行服务器端测试 310
12.7.1 从Ant视角看Cactus 311
12.7.2 Cactus如何运作 313
12.7.4 Cactus小结 314
12.7.3 我们的测试用例登场了 314
12.8 小结 315
第13章 使用XML 317
13.1 导言:关于XML库 318
13.2 验证XML 319
13.2.1 当文件不合法的时候 320
13.2.2 解析XML DTDs 321
13.2.3 支持其他的XML验证机制 322
13.3 利用XSLT转换XML 323
13.3.1 使用XML Catalog datatype 325
13.4 生成XML格式的构建日志 327
13.3.3 Styler——一个第三方的转换任务 327
13.3.2 由XML生成PDF文件 327
13.4.1 样式表 328
13.4.2 输出文件 329
13.4.3 构建日志的后处理 330
13.5 将XML数据载入Ant特性 331
13.7 小结 332
13.6 XML处理的将来 332
14.1 EJB概述 333
第14章 Enterprise JavaBeans 333
14.1.2 EJB JAR 334
14.1.1 Enterprise JavaBeans的多种类型 334
14.2 一个简单的EJB构建 335
14.1.3 厂商相关的情形 335
14.3 使用ANT的EJB任务 336
14.4 使用〈EJBJAR〉 337
14.4.1 厂商相关的〈ejbjar〉处理 339
14.5 使用XDoclet进行EJB开发 340
14.5.1 XDoclet子任务 341
14.5.2 XDoclet的@标记 342
14.5.4 Ant特性替换 343
14.5.3 利用XDoclet支持不同的应用服务器 343
14.6 MIDDLEGEN 345
14.7 部署到J2EE应用服务器 348
14.8 一个完整的EJB例子 349
14.10 小结 354
14.9 EJB工程的最佳实践 354
第15章 使用Web服务 355
15.1 何谓Web服务,何谓SOAP 356
15.2 用Ant创建一个SOAP客户端应用程序 357
15.1.2 向Java增加Web服务能力 357
15.1.1 SOAPAPI 357
15.2.1 准备我们的构建文件 358
15.2.2 创建代理类 359
15.2.4 编译SOAP客户端 361
15.2.3 使用SOAP代理类 361
15.2.5 运行SOAP服务 362
15.3 用Axis和Ant创建一个SOAP服务 363
15.2.6 回顾SOAP客户端创建 363
15.3.1 构建Web服务的简单方法 364
15.4.1 配置Web应用程序 367
15.4 向既有Web应用程序添加Web服务 367
15.4.3 在构建中包含SOAP服务 368
15.4.2 添加库 368
15.4.4 测试服务器上的需要类 369
15.4.6 部署Web服务 370
15.4.5 实现SOAP端点 370
15.5.1 导入WSDL 371
15.5 为SOAP服务编写客户端 371
15.5.2 实现测试 372
15.5.3 编写Java客户端 375
15.7 构建一个C#客户端 376
15.6 什么是互操作,为什么它成其为问题 376
15.7.1 条件探测 377
15.7.2 在C#中导入WSDL 378
15.7.4 构建C#客户端 379
15.7.3 编写C#客户端类 379
15.7.5 运行C#客户端 380
15.8 构建Web服务的严格方法 381
15.7.6 回顾C#客户端的构建过程 381
15.9 回顾Web服务开发 382
15.10 通过SOAP调用Ant 383
15.11 小结 384
第16章 持续集成 386
16.1.1 Windows方法 387
16.1 利用操作系统调度Ant构建 387
16.2 CRUISECONTROL 388
16.1.3 使用脚本 388
16.1.2 Unix版本 388
16.2.2 这就是Cruise——让构建管理器工作起来 389
16.2.1 它如何工作 389
16.2.3 报告构建日志 395
16.2.7 CruiseControl的优点和缺点 396
16.2.6 提示与技巧 396
16.2.4 邮件通知与构建标注 396
16.2.5 CruiseControl小结 396
16.3 ANTHILL 397
16.3.1 让Anthill转起来 398
16.3.2 Anthill是如何工作的 399
16.3.3 Anthill小结 400
16.4.1 安装和运行Gump 401
16.4 GUMP 401
16.4.2 Gump如何运作 403
16.4.3 Gump小结 404
16.5 持续集成工具的比较 405
16.6 小结 406
17.1 本地代码的挑战 407
第17章 开发本地代码 407
17.2.1 交给IDE去做 408
17.2 使用既有的构建工具 408
17.2.2 使用Make 409
17.3.1 安装任务 410
17.3 引入〈CC〉任务 410
17.3.3 〈cc〉任务快速入门 411
17.3.2 添加一个编译器 411
17.4 在ANT中构建一个JNI库 412
17.4.1 构建JNI库的步骤 413
17.4.2 编写Java存根(Stub) 414
17.4.3 编写C++++类 415
17.4.4 编译C++++源代码 416
17.4.5 部署和测试库 419
17.5.1 移植C++++源文件 422
17.5 实现跨平台 422
17.5.2 扩展构建文件 423
17.5.4 移植代码 424
17.5.3 移植测试 424
17.6.1 定义预处理宏 425
17.6 深入〈CC〉的细节 425
17.6.2 通过〈libset〉链接到库 426
17.6.3 配置编译器和链接器 427
17.6.4 定制链接器 428
17.7 发布本地库 429
17.8 小结 430
第18章 成品部署 431
18.1.1 迥然不同的底层行为 432
18.1 不同应用服务器的挑战 432
18.1.2 不同的Java运行时行为 433
18.1.3 使用不同的API实现进行复制 434
18.1.7 服务器相关的管理 436
18.1.6 与服务器相关的部署过程 436
18.1.4 与供应商相关的库 436
18.1.5 部署描述文件 436
18.2.2 操作员测试 437
18.2.1 操作员用例 437
18.2 与操作员齐心协力 437
18.2.4 将操作员与构建过程集成 438
18.2.3 操作员缺陷跟踪 438
18.3.2 为创建档案文件而编写统一的目标 440
18.3.1 建立单一的源代码树 440
18.3 利用Ant迎接部署的挑战 440
18.3.3 运行服务器端Ant进行部署 441
18.4.1 〈copy〉任务 442
18.4 ANT的强大部署工具介绍 442
18.3.4 自动化上载和部署过程 442
18.4.3 使用〈telnet〉进行远程控制 443
18.4.2 〈serverdeploy〉任务 443
18.5.1 计划 446
18.5 建立一个成品的部署过程 446
18.5.5 远程构建文件build.xml 447
18.5.4 构建文件 447
18.5.2 目录结构 447
18.5.3 配置文件 447
18.5.6 为安装到服务器编写构建文件 449
18.5.7 上载至远程服务器 450
18.5.8 让远程部署转起来 454
18.5.9 对部署过程进行回顾 455
18.6.1 Tomcat 4.0和Tomcat 4.1 456
18.6 部署至特定应用服务器 456
18.6.3 HP Bluestone应用服务器 458
18.6.2 BEA WebLogic 458
18.7 验证部署 459
18.6.4 其他服务器 459
18.7.2 将时间戳文件添加到应用程序中 460
18.7.1 创建时间戳文件 460
18.8 最佳实践 462
18.7.3 测试时间戳 462
18.9 小结 463
Part 3 扩展Ant 465
第19章 编写Ant任务 467
19.1.1 世界上最简单的Ant任务 468
19.1 什么是一个真正的Ant任务 468
19.1.3 任务的生命周期 469
19.1.2 在同一个构建过程中编译和应用一个任务 469
19.2.1 Task 470
19.2 Ant API入门 470
19.2.2 Project 471
19.2.5 DirectoryScanner 472
19.2.4 Fileset 472
19.2.3 Path 472
19.2.7 FileUtils 473
19.2.6 EnumeratedAttribute 473
19.3.1 设置属性 474
19.3 任务如何获得数据 474
19.3.2 支持嵌套元素 480
19.3.3 支持datatypes 481
19.3.4 允许自由格式文本 482
19.4.1 为任务添加属性 483
19.4 建立一个基本的Ant Task子类 483
19.4.2 处理元素文本 484
19.5 操作FILESET 485
19.6 错误处理 486
19.8 执行外部程序 487
19.7 测试Ant任务 487
19.9.1 创建Java程序新进程的示例 490
19.9 在任务中执行Java程序 490
19.8.1 处理进程输出 490
19.8.2 本地执行小结 490
19.10 支持任意命名的元素和属性 493
19.11 构建任务库 495
19.13 小结 497
19.12 支持多版本Ant 497
第20章 进一步扩展Ant 498
20.1 在Ant中使用脚本 499
20.1.1 〈script〉约定的隐含对象 500
20.1.2 脚本使用小结 501
20.2 监听者与日志工具 502
20.2.1 编写一个定制监听者 503
20.2.2 使用log4j的日志功能 506
20.2.3 编写一个定制日志工具 509
20.2.4 使用MailLogger 513
20.3 开发定制的MAPPER 514
20.4 创建定制的SELECTOR 515
20.4.1 在构建中使用定制selector 516
20.5 实现定制的FILTER 517
20.5.1 编写定制filter的reader 519
20.6 小结 520
附录A 安装 523
附录B Ant之XML入门 532
附录C IDE集成 536
附录D Ant风格的要素 544
附录E Ant任务参考 562
资源 621
索引 625
- 《“十三五”规划教材 中药鉴定学实验 供中药学 药学及相关专业使用 第2版》吴啟南 2018
- 《区块链DAPP开发入门、代码实现、场景应用》李万胜著 2019
- 《高含硫气藏开发腐蚀控制技术与实践》唐永帆,张强 2018
- 《主题公园开发与管理》梁增贤编著 2019
- 《新编临床药物使用规范》孙国栋,解华主编 2017
- 《中南高校档案文化资源开发综合研究》涂上飙 2019
- 《普通高等职业教育计算机系列规划教材 Android Studio移动应用开发基础》(中国)吴绍根 2019
- 《中国农药研究与应用全书 农药科学合理使用》欧晓明,司乃国,陈杰编 2019
- 《Cocos Creator微信小游戏开发实战》王绍明编著 2020
- 《排放权有偿使用定价》郭默,王金南,毕军著 2019
- 《SQL与关系数据库理论》(美)戴特(C.J.Date) 2019
- 《魔法销售台词》(美)埃尔默·惠勒著 2019
- 《看漫画学钢琴 技巧 3》高宁译;(日)川崎美雪 2019
- 《优势谈判 15周年经典版》(美)罗杰·道森 2018
- 《社会学与人类生活 社会问题解析 第11版》(美)James M. Henslin(詹姆斯·M. 汉斯林) 2019
- 《海明威书信集:1917-1961 下》(美)海明威(Ernest Hemingway)著;潘小松译 2019
- 《迁徙 默温自选诗集 上》(美)W.S.默温著;伽禾译 2020
- 《上帝的孤独者 下 托马斯·沃尔夫短篇小说集》(美)托马斯·沃尔夫著;刘积源译 2017
- 《巴黎永远没个完》(美)海明威著 2017
- 《剑桥国际英语写作教程 段落写作》(美)吉尔·辛格尔顿(Jill Shingleton)编著 2019
- 《电子测量与仪器》人力资源和社会保障部教材办公室组织编写 2009
- 《少儿电子琴入门教程 双色图解版》灌木文化 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《通信电子电路原理及仿真设计》叶建芳 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《电子应用技术项目教程 第3版》王彰云 2019
- 《中国十大出版家》王震,贺越明著 1991
- 《近代民营出版机构的英语函授教育 以“商务、中华、开明”函授学校为个案 1915年-1946年版》丁伟 2017