コマンドラインから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で実行されています。
PowerShellでコンソールEXEに渡される引数の解釈に問題が発生した場合は、echoargs.exe
PowerShell 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'
このメールスレッド によると:
一般に、Powershell for Maven、svnなどを使用している場合、ダッシュ(-)で始まる引数をエスケープする必要があります。 Powershellのエスケープ文字はバックティックです。つまり、mvn archetype:create `-DgroupId = blah` -DartifactId = blahになります。 、「-」は、Powershellコンソールからmavenを実行するときにバックティックでエスケープする必要がある特殊文字です。
次は私のために働きます。
$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)を使用しています