3

ハドソンにmavenでビルドされたプロジェクトがあります。C++ ソース コードをコンパイルして、プロジェクトの他の部分で使用される実行可能ファイルを作成します。Visual Studio ツール、特に問題を引き起こしているツールを使用します。midl プログラムをロードしようとしても、見つかりません。サーバーにログインすると、ハドソンが住んでいて、その特定のプロジェクトで mvn clean install を実行しようとすると、次のようになります。

D:\Hudson\jobs\{project-name}>mvn clean install
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.876s
[INFO] Finished at: Mon Jan 14 21:56:18 PST 2013
[INFO] Final Memory: 8M/154M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (build-tlb) on project interop: Command execution failed.
Cannot run program "midl" (in directory "D:\Hudson\jobs\{project-name}"): CreateProcess error=2, The system cannot find the file specified ->     [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR]     [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

これを回避する方法は、Visual Studio ツールをロードすることです。

D:\Hudson\jobs\{project-name}>%VS100COMNTOOLS%\vsvars32.bat
Setting environment for using Microsoft Visual Studio 2010 x86 tools.

それをした後、私はきれいなビルドを取得します:

D:\Hudson\jobs\{project-name}>mvn clean install
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.331s
[INFO] Finished at: Mon Jan 14 21:59:06 PST 2013
[INFO] Final Memory: 13M/222M
[INFO] ------------------------------------------------------------------------

しかし、Hudson が自動ビルドを開始すると、これは機能しません。そのバットファイル(vsvars32.bat)をロードしようとしました:

pushd %VS100COMNTOOLS%
vsvars32.bat
popd

Maven プロセスを開始する前に、コンソール出力に次のように表示されるため、これが機能していることがわかります。

C:\Apps\MicrosoftVisualStudio-10.0\Common7\Tools>vsvars32.bat
Setting environment for using Microsoft Visual Studio 2010 x86 tools.

しかし、midl が実際に使用されるポイントに到達するたびに、ビルドの失敗後に次の出力が得られます。

[INFO] o.h.m.e.h.MavenExecutionResultHandler - Build failed with exception(s)
[INFO] o.h.m.e.h.MavenExecutionResultHandler -     [1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (build-tlb) on project interop: Command execution failed.
[DEBUG] Closing connection to remote

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (build-tlb) on project interop: Command execution failed. Cannot run program "midl" (in directory "D:\Hudson\jobs\{project-name}"): CreateProcess error=2, The system cannot find the file specified ->     [Help 1]

Hudson 構成パネルで、環境変数ペア {VS100COMNTOOLS,C:\Apps\MicrosoftVisualStudio-10.0\Common7\Tools} も設定します。他に何をすべきかわかりません。どんな助けも感謝します。

4

1 に答える 1

4

私はついにこれを理解しました。Hudsonが新しいタスクを呼び出す方法は、新しいcmdウィンドウを呼び出すことです。これにより、%VS100COMNTOOLS%\vsvars32.batツールが別のインスタンスに設定されます。%MAVEN_HOME%\ binのmvn.batを見ると、前にbatファイルを呼び出すことができます。存在する場合は「%HOME%\ mavenrc_pre.bat」を呼び出します。「%HOME%\ mavenrc_pre.bat」を呼び出します。%VS100COMNTOOLS%\vsvars32を呼び出しました。 .batがあるので、Mavenを実行するたびに、ビジュアルツールも読み込まれます。それにもかかわらず、Hudsonはその特定のbatファイルを呼び出すことによってMavenタスクを開始しないようです。それは、そのmavenrc_pre.batを無視して、どういうわけか独自のMavenインスタンスを作成します。これを回避する方法は、タスクをMavenタスクとしてではなく、バッチタスクとして作成し、次のように呼び出すことです。mvncleaninstallこれで問題が解決しました。

于 2013-01-17T16:15:16.110 に答える