第 18 章 使用 Maven 构建
摘要
Maven 是一个开源构建系统,可从 Apache Maven 项目获取。本章介绍了一些基本的 Maven 概念,并描述了如何设置 Maven 以使用 Red Hat Fuse。在原则上,您可以使用任何构建系统来构建 OSGi 捆绑包。但强烈建议 Maven,因为 Red Hat Fuse 得到良好支持。
18.1. Maven 目录结构
18.1.1. 概述
Maven 构建系统最重要的原则之一是 Maven 项目中所有文件的标准位置。这个原则有几个优点。一个优点是 Maven 项目通常具有相同的目录布局,因此可以轻松地在项目中找到文件。另一个优点是,与 Maven 集成的各种工具需要 几乎不需要 初始配置。例如,Java 编译器知道它应当编译 src/main/java
下的所有源文件,并将结果置于 target/classes
中。
18.1.2. 标准目录布局
例 18.1 “标准 Maven 目录布局” 显示与构建 OSGi 捆绑包项目相关的标准 Maven 目录布局的元素。此外,还显示了蓝图配置文件( 不是由 Maven 定义)的标准位置。
例 18.1. 标准 Maven 目录布局
ProjectDir/
pom.xml
src/
main/
java/
...
resources/
META-INF/
OSGI-INF/
blueprint/
*.xml
test/
java/
resources/
target/
...
可以覆盖标准目录布局,但不建议 在 Maven 中这样做。
18.1.3. pom.xml 文件
pom.xml
文件是当前项目的项目对象模型(POM),其中包含如何构建当前项目的完整描述。pom.xml
文件可以完全自包含,但通常(对于更复杂的 Maven 项目而言),它可以 从父 POM 文件导入设置。
构建项目后,在生成的 JAR 文件中的以下位置自动嵌入 pom.xml
文件的副本:
META-INF/maven/groupId/artifactId/pom.xml
18.1.4. src 和目标目录
src/
目录包含您在开发项目时工作的所有代码和资源文件。
target/
目录包含构建的结果(通常是 JAR 文件),以及构建期间生成的所有中间文件。例如,在执行构建后,target/classes/
目录将包含资源文件的副本以及已编译的 Java 类。
18.1.5. 主和测试目录
src/main/
目录包含构建工件所需的所有代码和资源。
src/test/
目录包含针对编译的工件运行单元测试的所有代码和资源。
18.1.6. java directory
每个 java/
子目录都包含带有标准 Java 目录布局(即目录路径名称的 Java 源代码)的 Java 源代码(.java
文件),其中目录名会镜像 Java 软件包名,其 /
代替 .
字符。src/main/java/
目录包含捆绑包源代码,而 src/test/java/
目录包含单元测试源代码。
18.1.7. 资源目录
如果您有捆绑包中包含的任何配置文件、数据文件或 Java 属性,则这些配置文件应放在 src/main/resources/
目录下。src/main/resources/
下的文件和目录将复制到 Maven 构建过程生成的 JAR 文件的根目录中。
src/test/resources/
下的文件仅在测试阶段使用,且不会 复制到生成的 JAR 文件中。
18.1.8. 蓝图容器
OSGi R4.2 定义蓝图容器。Red Hat Fuse 对 Blueprint 容器内置了支持,只需在项目中包含 Blueprint 配置文件 OSGI-INF/blueprintAttr.xml
即可启用这些容器。有关 Blueprint 容器的详情,请参考 第 12 章 OSGi 服务。