【问题标题】:How to run maven commands as background process in power shell如何在power shell中将maven命令作为后台进程运行
【发布时间】:2019-09-24 06:18:27
【问题描述】:

我有几个 spring boot 项目需要在 jenkins 中使用 power shell 运行。我可以使用以下命令在本地完成部分操作 -

mvn -f $repoLocation -D "spring-boot.run.profiles=e2e" -DskipTests=true spring-boot:run

这样做的问题是,一旦第一个项目运行,它就一直在等待它而不会移动到下一个项目。也就是说,它不会将此命令作为后台进程运行。

关于我该怎么做的任何建议?我基本上需要按照$repos数组中包含的顺序启动项目。

注意 - 我尝试如下使用 start process,但它只是在新的命令提示符中调用它,并且只能运行第一个,类似于我能够实现的。

foreach ($element in $repos) {
    $repoLocation = $localPath + $element.Split('/')[-1]
    Write-Host('Maven build for ' + $repoLocation)
    start-process -FilePath mvn -ArgumentList ("-f $repoLocation -D `"spring-boot.run.profiles=prod`" -DskipTests=true spring-boot:run") -Wait
    #mvn -f $repoLocation -D "spring-boot.run.profiles=prod" -DskipTests=true spring-boot:run
    Write-Host('Maven build completed for ' + $repoLocation)
    $repoLocation = ''
}

【问题讨论】:

    标签: powershell maven spring-boot


    【解决方案1】:

    我将参考下面的博文...

    Parallel processing with PowerShell

    您需要跳到有关 Powershell 作业的部分。你的工作可能看起来像这样......

    ## Using Jobs...
    $repositories = $(...)
    
    foreach ($repository in $repositories) {
        Start-Job `
            -Name "build-${repository}" `
            -Scriptblock {
                param($repository)
                mvn --file .\${repository}\xml.pom -D "spring-boot.run.profiles=e2e" -DskipTests=true spring-boot:run } `
            -ArgumentList $repository
    }
    

    你的 maven 调用可能会有所不同,但你知道我要去哪里。 Start-Job 启动异步操作。

    有关 Powershell 作业的资料非常丰富,我不会在此重复。

    Powershell 工作流程(也在文章中详细介绍)可能也适合您的需求。 如果您在并行化空间中挖掘得更深一点,您就会开始阅读有关运行空间的信息。一般来说,我喜欢运行空间,但不是因为你正在做的事情。

    【讨论】:

    • 非常感谢。它就像一个魅力,只是我必须像-ScriptBlock { param($repository)..... 那样修改脚本块,否则它不会为我拾取传递的参数。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多