Maven 仅构建已更改的文件

2022-09-01 01:58:31

假设我有如下模块结构

     Modules
       ->utils
       ->domain
       ->client
       ->services
       ->deploy (this is at the module level)

现在要包扎客户端,我需要构建所有模块,因为我正在加载上述所有模块的jars,以最终包扎客户端i.e utils, domain, client, services,

所有的 jar 都组装在模块部署中。

我的问题是,如果我在服务中更改了任何内容,那么在运行构建时,有没有办法识别它只需要构建,从而构建它并将其部署在deval文件夹中?deploy mavenservices


答案 1

如果只调用“mvn install”而不调用“clean”,编译器插件将只编译修改后的类。


答案 2

对于 GIT

mvn install -amd -pl $(git status | grep -E "modified:|deleted:|added:" | awk '{print $2}' | cut -f1 -d"/")

在您的 .bashrc 文件中(.bashrc 可以在主目录 ~/.bashrc 中找到,如果不存在,请创建它)添加以下函数。

mvn_changed_modules(){
    [ -z "$1" ] && echo "Expected command : mvn_changed_modules (install/build/clean or any maven command)" && exit 0

        modules=$(git status | grep -E "modified:|deleted:|added:" | awk '{print $2}' | cut -f1 -d"/")

                if [  -z "$modules" ];
                then
                        echo "No changes (modified / deleted / added)  found"
                else
                        echo -e "Changed modules are : `echo $modules`\n\n"
                        mvn $1 -amd -pl $modules
                fi
}

**然后重新启动bash**(命令提示符)后,您**可以从ROOT目录本身使用以下命令**。

smilyface@machine>ProjectRootDir]$ mvn_changed_module install

它是如何工作的
根据问题是“在服务模块中完成一些更改”时的命令。因此,首先从更改的文件中获取模块名称,并将其作为 mvn-install 命令的输入mvn install -amd -pl services

例如,下面是已修改文件(输出)的列表 -
services/pom.xml
services/ReadMe.txt
web/src/java/com/some/Name.java
然后是需要构建/编译/安装的模块名称git statusservicesweb


推荐