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文件夹中?
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安装将整个模块安装到本地存储库中.
对于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
然后services和web有需要加以构建模块名称/编译/安装
小智 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)
| 归档时间: |
|
| 查看次数: |
31340 次 |
| 最近记录: |