Maven构建仅更改了文件

use*_*036 34 java continuous-integration build maven

可以说我有类似下面的模块结构

     Modules
       ->utils
       ->domain
       ->client
       ->services
       ->deploy (this is at the module level)
Run Code Online (Sandbox Code Playgroud)

现在,我需要建立所有模块的客户端,i.e utils, domain, client, services,因为我正在加载所有上述模块的罐子,以便客户端

并且所有罐子都在模块部署中组装.

我的问题是,如果我改变了服务中的任何内容,那么有没有办法在运行构建时deploy maven可以识别它只需要构建services并因此构建它并将其部署在deploy文件夹中?

Puc*_*uce 27

如果你只调用"mvn install"而没有"clean",编译器插件将只编译修改过的类.


khm*_*ise 12

在多模块构建中,您可以使用:

mvn -pl ChangedModule compile
Run Code Online (Sandbox Code Playgroud)

从根模块将只编译给定的ChangedModule.编译器插件只会编译已更改的文件.但是,您更改的模块可能会导致重新编译其他模块,这取决于ChangedModule.这可以通过使用以下方法实现:

mvn -amd -pl ChangedModule compile
Run Code Online (Sandbox Code Playgroud)

其中-amd 表示依赖.这将无需通过mvn安装将整个模块安装到本地存储库中.


smi*_*ace 7

对于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 "Changed modules are : `echo $modules`"
                        mvn install -amd -pl $modules
                fi
}
Run Code Online (Sandbox Code Playgroud)


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

smilyface @ machine> MainDir] $ mvn_changed_module安装


怎么运行的?
按照问题mvn install -amd -pl services是“服务模块中的某些更改”时的命令。因此,首先从更改的文件中获取模块名称,并将其作为mvn-install命令的输入

比方说,下面是修改过的文件的列表(输出git status) -
服务 /pom.xml
服务 /ReadMe.txt
网络 /src/java/com/some/Name.java
然后servicesweb有需要加以构建模块名称/编译/安装

  • 就在我寻找 git 而不是 svn 的时候!好的! (2认同)
  • 我猜这对我不起作用,因为我的 mvn (3.8.1) 期望 -pl 参数用逗号分隔。这是在 bash@macos 上起作用的 --> mvn install -amd -pl $(git status | grep -E "modified:|deleted:|added:" | awk '{print $2}' | cut -f1 -d “/”|排序|uniq|粘贴-sd“,”-) (2认同)

小智 6

如果您从根模块使用SVN和*nix

mvn install -amd -pl $(svn st | colrm 1 8 | sed 's /.*  ' | xargs echo | sed 's- -,:-g' | sed 's ^ : ') 
Run Code Online (Sandbox Code Playgroud)

  • Can you give me an example - so that I can make the same for git ! (2认同)
  • 有人可以在这个命令链背后添加简短的解释吗? (2认同)
  • @smilyface,您找到GIT的任何解决方案了吗? (2认同)