webdevqa.jp.net

Microsoft Powershell内で `mvn -D`引数を使用してMavenを実行することはできませんが、コマンドプロンプトでは機能します

コマンドラインからWebプロジェクトを構築しようとしていますが、テストをスキップしています。コマンドmvn clean install -Dmaven.test.skip=trueを使用しています。

従来の白黒のコマンドプロンプト(別名DOSシェル)からコマンドを実行するとコマンドは機能しますが、「Windows PowerShell」のコマンドから実行すると、次のエラーが発生します。

[ERROR] Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin- artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepar e-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-site, site, post-site, site-deploy, pre-clean, clean, po st-clean. -> [Help 1]

この不一致の原因は何ですか?PowerShellを従来のコマンドプロンプトのように動作させるにはどうすればよいですか?

これはWindows 7で実行されています。

46
Sled

PowerShellでコンソールEXEに渡される引数の解釈に問題が発生した場合は、echoargs.exePowerShell Community Extensions に付属するユーティリティ。このツールを使用すると、PowerShellがどのようにEXEに引数を提供するかを確認できます。例:

PS> echoargs mvn clean install -Dmaven.test.skip=true
Arg 0 is <mvn>
Arg 1 is <clean>
Arg 2 is <install>
Arg 3 is <-Dmaven>
Arg 4 is <.test.skip=true>

PS> echoargs mvn clean install '-Dmaven.test.skip=true'
Arg 0 is <mvn>
Arg 1 is <clean>
Arg 2 is <install>
Arg 3 is <-Dmaven.test.skip=true>

短い答え-引用を使用'-Dmaven.test.skip=true'

101
Keith Hill

このメールスレッド によると:

一般に、Powershell for Maven、svnなどを使用している場合、ダッシュ(-)で始まる引数をエスケープする必要があります。 Powershellのエスケープ文字はバックティックです。つまり、mvn archetype:create `-DgroupId = blah` -DartifactId = blahになります。 、「-」は、Powershellコンソールからmavenを実行するときにバックティックでエスケープする必要がある特殊文字です。

9
katrash

次は私のために働きます。

$mvnArgs1 ="mvn test -X -Dmaven.test.skip=true".replace('-D','`-D')
Invoke-Expression $mvnArgs1

-Dは特殊文字の一種であり、エスケープが必要なようです。
– Xは正常に機能し、エスケープする必要がないことにも注意してください。 replaceコマンドでの単一引用符の使用に注意してください。二重引用符を使用する場合(つまり「」)、「」を使用する必要があります。

Windows 7でPowershell 2.0(2.0.1.1)を使用しています

5
Haim Raman