Ste*_*ers 19 java build batch-file maven-plugin maven
我正在开发一个包含许多不同模块的大型Maven项目.Maven构建在某些模块上间歇性地失败,但如果一切都很好,一个简单的手动调用--resume-from(有时在几个不同的模块上)将允许它继续成功.
我故意忽略了为什么会发生这种情况的细节 - 怀疑它可能是由于Windows文件锁定目标文件夹中的文件 - 但这不是问题的关键.
问题:是否有可能让Maven自动重试(可能只有一次,或者可能最多3次),从故障模块恢复?
思考:我目前唯一能想到的方法是通过一个批处理文件,它读取最后一行并以某种方式提取模块名称以便从中恢复 - 但这看起来并不容易.不想重新发明轮子,并想知道是否有一个漂亮的Maven插件已经完成了这项工作?
我有一个想法来解决您的问题,也许您不需要批处理文件来完成这项工作.您可以创建Maven Core Extension并创建一个EventSpy库,以便在构建失败时执行--resume-.我已经测试了这个答案中找到的这个例子当构建失败时运行maven插件
根据这个答案,你可以使用Maven Invoker Maven Invoker
然而......我找到了安全并行构建Maven Core Extensions安全并行构建示例的扩展
我知道你需要项目信息...所以查看ExecutionEvent和MavenProject类的内部我们有关于当前建筑项目的所有信息.
我希望它也适合你.
编辑:
我正在寻找一些实现此行为的扩展"在某些模块失败时自动重试".如果我没有找到任何东西,我们应该创建一个扩展.
下面是一个完全成熟的批处理文件,使用Anitha.R 的答案作为起点。
使用说明:
usr\binmax_retries根据需要更改值。mvnretry clean install -Pmyprofile -DskipTests。批处理文件代码:
@echo off
setlocal enabledelayedexpansion
set max_retries=3
set retry_count=0
set output_file=%date:/=%%time::=%
set output_file=%output_file: =0%
set output_file=%temp%\mvn%output_file:.=%.out
set mvn_command=call mvn %*
set tee_found=true
where /q tee
if not errorlevel 1 goto retry
set tee_found=false
echo tee.exe not found in system path^^! Build will continue but output will be delayed...
:retry
echo %mvn_command%
if %tee_found%==true (
%mvn_command% | tee %output_file%
) else (
%mvn_command% > %output_file%
type %output_file%
)
echo Parsing output...
set "resume_from="
for /f "tokens=2 delims=:" %%i in ('type %output_file% ^| find "mvn <goals> -rf"') do (
set resume_from=%%i
)
if !retry_count! LSS %max_retries% if not [%resume_from%] == [] (
echo Resuming from %resume_from%...
set /a retry_count=retry_count+1
set /a retries_remaining=max_retries-retry_count
echo Retrying... [retries used: !retry_count!, retries remaining: !retries_remaining!]
set mvn_command=call mvn -rf :%resume_from% %*
goto retry
)
del /q %output_file%
endlocal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |