如何在Power Shell中将Maven命令作为后台进程运行

时间:2019-05-06 15:22:50

标签: powershell maven spring-boot

在jenkins中,我需要使用power shell运行一些spring boot项目。我可以使用以下命令在本地执行部分操作-

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 = ''
}

1 个答案:

答案 0 :(得分: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工作流程(在文章中也有详细介绍)也可能适合您的需求。 如果您对并行化空间进行更深入的研究,您将开始了解运行空间。一般来说,我喜欢运行空间,但不喜欢您正在做什么。