第 18 章 使用 Maven 构建

摘要

Maven 是一个开源构建系统,可从 Apache Maven 项目获取。本章介绍了一些基本的 Maven 概念,并描述了如何设置 Maven 来使用 Red Hat Fuse。在原则上,您可以使用任何构建系统来构建 OSGi 捆绑包。但强烈建议使用 Maven,因为红帽 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 目录布局的元素。另外,也会显示 Blueprint 配置文件( 不由 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 file

pom.xml 文件是当前项目的 Project Object Model(POM),其中包含有关如何构建当前项目的完整描述。pom.xml 文件可以完全包含,但频繁(用于更复杂的 Maven 项目);它可以从 父 POM 文件导入设置。

构建项目后,pom.xml 文件的副本将自动嵌入到生成的 JAR 文件中的以下位置:

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 目录

每个 java/ 子目录均包含 Java 源代码(*.java 文件),其标准 Java 目录布局(即,目录路径名称镜像 Java 软件包名称的位置,其中 / 代替 . 字符)。src/main/java/ 目录包含捆绑源代码,src/test/java/ 目录包含单元测试源代码。

18.1.7. resources 目录

如果您有要包含在捆绑包中的配置文件、数据文件或 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/blueprint/*.xml 来启用它。有关 Blueprint 容器的详情,请参考 第 12 章 OSGi 服务