我有一个powershell(v2.0)函数:
function mvn{
param(
[parameter(Position=0, ValueFromRemainingArguments=$true)]
$args
)
<# calling the realmaven.bat file here with the args #>
"$env:M2_HOME\bin\mvn.bat" $args
}
现在我想使用前者在此脚本文件中使用另一个函数:
function mvn-failsafe-debug {
param (
[string] $Dmaven_failsafe_debug="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,address=Maven,suspend=n",
[parameter(Position=0, ValueFromRemainingArguments=$true)]
$args
)
<#
calling the predefined mvn function above
#>
mvn `-Dmaven.failsafe.debug=$Dmaven_failsafe_debug $args
}
现在在powershell提示符上使用mvn-failsafe-debug clean install
时生成的命令类似于:
realmaven.bat ...“干净安装”
但我需要它
realmaven.bat ...清理安装
如何实现?
答案 0 :(得分:1)
不确定这是否是您遇到困难的全部原因,但对于初学者来说,不要将变量命名为$args
。这是PowerShell中的自动变量。您可以查看about_Automatic_Variables以了解我的意思。
如果没有别的,你应该在param
重命名该行。我只是将变量名称更改为$remains
。
在同样的方面,您可以将调用函数更改为类似的内容。
function mvn{
param(
[parameter(Position=0, ValueFromRemainingArguments=$true)]
$remains
)
Write-Host $remains
Start-Process "$($env:M2_HOME)\bin\mvn.bat" -ArgumentList ($remains -join "")
}
答案 1 :(得分:1)
您有两种选择。您可以使用参数数组而不是字符串调用function mvn
,也可以拆分字符串。
因此,要么保持原样并使用
mvn-failsafe-debug clean, install
或将其更改为
function mvn {
param(
[parameter(Position=0)]
[string] $arguments
)
Start-Process "$($env:M2_HOME)\bin\mvn.bat" -ArgumentList ($arguments -split " ")
}
答案 2 :(得分:0)
@Swoogan,你的$(arguments -split " ")
终于给了我需要的东西。
为了理解我现在使用的解决方案如下所示(作为一个简单的用例mvn-eval
作为一个更复杂的mvn-surefire-debug
):
function mvn {
param(
[parameter(Position=0)]
[string] $arguments
)
& "$($env:M2_HOME)\bin\mvn.bat" ($arguments -split " ")
}
function mvn-eval {
param (
[string] $Dexpression="basedir",
[parameter(Position=0, ValueFromRemainingArguments=$true)]
$args
)
mvn "help:evaluate $args"
}
function mvn-surefire-debug {
param (
[string] $Dmaven_surefire_debug="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,address=Maven,suspend=n"
, [parameter(Position=0, ValueFromRemainingArguments=$true)]
$remains
)
mvn """`-Dmaven.surefire.debug=$Dmaven_surefire_debug"" $remains"
}