Maven 教程(15)— 实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)

一、场景

设想一个团队正在开发一个项目 bus-core-api,并且有其他两个项目 app-web-ui 和 app-desktop-ui 依赖于这个项目。

bus-core-api 项目为 1.0 快照版本。

app-web-ui 项目使用的是 bus-core-api 项目的 1.0 快照。

app-desktop-ui 项目使用的是 bus-core-api 项目的 1.0 快照。

现在 app-web-ui 和 app-desktop-ui 项目的团队要求的是不管 bus-core-api 项目何时变化,他们的构建过程都应当可以启动。

使用快照确保了最新的 bus-core-api 项目会被使用,但要达到上面的要求,我们还需要做一些额外的工作。

提示:其实这个场景有一点矛盾,但是为了演示效果,可以这样理解,即当 bus-core-api 项目构建时,自动构建 app-web-ui 和 app-desktop-ui 项目。

二、构建方式选择

有以下三种构建方式:

  • 在 bus-core-api 项目的 pom.xml 文件中添加一个 maven-invoker-plugin 插件操作来启动 app-web-ui 和 app-desktop-ui 项目的构建;
  • 使用持续集成(CI) 服务器,比如Jenkins,来自行管理构建自动化(省略);
  • 使用脚本实现(Linux/Windows)(省略)。
三、使用 maven-invoker-plugin 插件操作实现详解

源码地址:https://gitee.com/liupeifeng3514/maven_automation_construction

maven-invoker-plugin插件详细用法参考:http://maven.apache.org/plugins/maven-invoker-plugin/

准备环境:

  1. 建立目录 C:\Maven-Build-Automation 和 C:\Maven-Build-Automation\projects;
  2. 在 C:\Maven-Build-Automation 下 创建 bus-core-api 项目,在 C:\Maven-Build-Automation\projects 下创建 app-web-ui 和 app-desktop-ui 项目。

目录结构如下:

├─bus-core-api
│  ├─src
│  │  ├─main
│  │  │  └─java
│  │  └─test
│  │      └─java
│  └─target
│      ├─classes
│      ├─invoker-reports
│      ├─maven-archiver
│      ├─surefire-reports
│      └─test-classes
└─projects
    ├─app-desktop-ui
    │  ├─src
    │  │  ├─main
    │  │  │  └─java
    │  │  └─test
    │  │      └─java
    │  └─target
    │      ├─classes
    │      ├─maven-archiver
    │      ├─surefire
    │      ├─surefire-reports
    │      └─test-classes
    └─app-web-ui
        ├─src
        │  ├─main
        │  │  └─java
        │  └─test
        │      └─java
        └─target
            ├─classes
            ├─maven-archiver
            ├─surefire
            ├─surefire-reports
            └─test-classes

app-web-ui项目的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>app-web-ui</groupId>
    <artifactId>app-web-ui</artifactId>
    <version>1.0</version>
    <name>网页 UI</name>
    <description>app-web-ui 依赖 bus-core-api</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>bus-core-api</groupId>
            <artifactId>bus-core-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-0.0.1-SNAPSHOT.jar</systemPath>
        </dependency>
    </dependencies>
</project>

提示:为了测试,设置 bus-core-api 项目依赖为本地依赖。其中C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-1.0-SNAPSHOT.jar为bus-core-api项目生成的jar包最终存放位置。

app-desktop-ui项目的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>app-desktop-ui</groupId>
    <artifactId>app-desktop-ui</artifactId>
    <version>1.0</version>
    <name>应用程序桌面 UI</name>
    <description>app-desktop-ui 依赖 bus-core-api</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>bus-core-api</groupId>
            <artifactId>bus-core-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-0.0.1-SNAPSHOT.jar</systemPath>
        </dependency>
    </dependencies>
</project>

bus-core-api项目的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>bus-core-api</groupId>
    <artifactId>bus-core-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>总线核心 Api</name>
    <description>总线核心 Api</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-invoker-plugin</artifactId>
                <version>2.0.0</version>
                <configuration>
                    <debug>true</debug>
                    <projectsDirectory>C:\Maven-Build-Automation\projects</projectsDirectory>
                    <cloneProjectsTo>${project.build.directory}</cloneProjectsTo>
                    <!-- 此种方式一直没有测试成功,也没有找出是什么问题
                    <pomIncludes>
                        <pomInclude>C:\Maven-Build-Automation\projects\app-web-ui\pom.xml</pomInclude>
                        <pomInclude>C:\Maven-Build-Automation\projects\app-desktop-ui\pom.xml</pomInclude>
                    </pomIncludes>
                     -->
                </configuration>
                <executions>
                    <execution>
                        <id>id-integration-test</id>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

注意:<projectsDirectory>节点指定的是app-web-ui和app-desktop-ui项目的目录C:\Maven-Build-Automation\projects。

由于 maven-invoker-plugin 插件绑定的 Maven 生命周期阶段为 integration-test 以上,所以在命令行上输入 integration-test 阶段及其以上的都可以触发。
这里写图片描述
详细的Maven生命周期参考:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

此时在C:\Maven-Build-Automation\bus-core-api执行命令:

mvn integration-test
C:\Maven-Build-Automation\bus-core-api>mvn integration-test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building 总线核心 Api 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ bus-core-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ bus-core-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Maven-Build-Automation\bus-core-api\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ bus-core-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ bus-core-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ bus-core-api ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ bus-core-api ---
[INFO] Building jar: C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-invoker-plugin:2.0.0:run (id-integration-test) @ bus-core-api ---
[INFO] Building: app-desktop-ui\pom.xml
[INFO] ..SUCCESS (3.5 s)
[INFO] Building: app-web-ui\pom.xml
[INFO] ..SUCCESS (3.5 s)
[INFO] -------------------------------------------------
[INFO] Build Summary:
[INFO]   Passed: 2, Failed: 0, Errors: 0, Skipped: 0
[INFO] -------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.647 s
[INFO] Finished at: 2018-03-28T13:49:08+08:00
[INFO] Final Memory: 16M/161M
[INFO] ------------------------------------------------------------------------

C:\Maven-Build-Automation\bus-core-api>

测试成功输出所有项目的jar包。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用maven的mybatis-generator-maven-plugin件自动生成实体映射文件时,我们首先需要在maven的pom.xml文件中配置件。 在<build>标签下,添加如下代码: ``` <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <dependencies> <!-- 添加数据库驱动依赖 --> </dependencies> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin> </plugins> ``` 接下来,在项目的根目录下执行以下命令生成实体映射文件: ``` mvn mybatis-generator:generate ``` 执行完毕后,件会根据配置信息,在项目的src/main/java目录下生成对应的实体类、mapper接口和xml映射文件。 在配置件时,可以设置数据库连接信息、需要生成的表名、生成的实体类和映射文件的位置等。具体的配置信息可以参考官方文档。 生成的实体类对应数据库中的表结构,各个字段通过对应的get和set方法来访问。生成的mapper接口定义了对应的数据库操作方法,通过调用这些方法可以对数据库进行增删改查操作。生成的xml映射文件定义了实体类和数据库表之间的映射关系,通过该文件可以实现对象和表的相互转换。 通过使用maven的mybatis-generator-maven-plugin件,我们可以简化开发人员编写实体映射文件的工作,提高开发效率和代码质量。同时,件的配置灵活多样,可以根据项目的实际需求进行定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值