👋

Anypoint Code BuilderでRun and Debugができない場合の対処法

2024/09/16に公開

概要

MuleSoftのAnypoint Code Builderで"Run and Debug"をする際に色々詰まったので、その時の対処法を記載する。

おそらく、将来的に解消されるものもあると思うが、トライアンドエラーした内容をすべて記す。

前提

  • Windows11
  • visual studio code(vs code)
  • Anypoint Extension Pack v1.3.0

エラーが出たときに見る場所

Run and Debug(F5)を実行した後に、以下の流れで処理が進む(基本的に、自動で表示が切り替わる)

  1. vs codeのOUTPUTタブに表示される内容(mavenの実行結果)
  2. vs codeのTERMINALタブに表示される内容(Mule Runtimeの起動&実行結果)

上記のいずれかで(もしくはRun and Debug実行直後に)表示されるエラー文を見ながら、エラー解消していく必要がある。
正常に行けば、Run and Debug実行後に上記の「2」において、deployedがどこかに表示されているはず。

また、デフォルトでホームディレクトリ(C:/Users/{name}/AnypointCodeBuilder)にruntimeがインストールされていて、以下のフォルダ構成になっている。

AnypointCodeBuilder
├── java
├── mvn
└── runtime/
    ├── mule-enterprise-standalone-4.7.0
    └── mule-enterprise-standalone-{other-version}

エラー & 対処法

vs codeで開いているフォルダを確かめる

初歩的だが、プロジェクトのフォルダ(pom.xmlがあるフォルダ)でvs codeを起動しておく必要がある。

Anypoint Platformにログインする

コマンドパレット(Ctrl+Shit+P)を開き、MuleSoft: Login to Anypoint Platformを選択する。
その後、各種指示に従ってログインをする。

※直接的には必要ないかもしれないが、ログインを前提とする操作が多いため初めに実行しておくとよい。

powershellの実行ポリシーを変更する

Run and Debugを実行すると、(windowsの場合)powershellで実行コマンドが走る。
その中でps1ファイルを実行しているが、デフォルトだとpowershell内で実行権限がないために失敗する。

Set-ExecutionPolicyコマンドを使って設定変更すればよい。
以下の記事を参考に設定ができる。

埋め込みのMule Runtimeを再インストールする

以下のエラーが出た場合に有効である。

  • com.mulesoft.licm.impl.TrueLicenseHelper: Couldn't validate license key!
    • どうやら、1ヶ月でライセンスが切れるようなので、都度再インストールは必要
  • その他エラー(後述)に記載のエラー発生時
    • ※有効というより、他に手が思いつかなかった

手順

以下の手順で、runtimeの再インストールをする

  1. 使用しているruntime(AnypointCodeBuilder/runtime/mule-enterprise-standalone-{version})をフォルダごと削除する
    2. 「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」の場合の対処法は後述の通りである
  2. vs codeのコマンドパレット(Ctrl+Shift+P)を開く
  3. MuleSoft: Download Mule Runtime and Java Versionsを選択する
    4. 指示に従い、適切なバージョンをインストールする
  4. 消したフォルダと同じ場所(AnypointCodeBuilder/runtime/mule-enterprise-standalone-{version})にruntimeがインストールされているはずである。

※3をしなくても、runtimeがないのでインストールしますか?のようなメッセージが出る場合もある。その場合はそこから再インストールすればよい

別プロセスがMule Runtimeを使用している場合

以下の2パターンがあった。

  • Runtime関連のフォルダやファイルを消そうとした場合に、「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」と表示される
  • vs codeでRun and Debugを実行するとEBUSY: resource busy or locked ...と表示される

先に対処法を説明したうえで、エラー詳細は後述する。

対処法

以下の3つを試すとよい。

  1. vs codeを再起動する
  2. PCを再起動する
  3. プロセスを特定して終了する

私の場合、PCを再起動してもダメだった場合があったので、3つ目の対処法も必要であった。
なお、もう一度vs codeを開くと同じ症状になる場合がある(無限ループする)ので、本エラーが解消したうえで埋め込みのMule Runtimeを再インストールするを実行するのも有効かもしれない。

なお、「3. プロセスを特定して終了する」については以下を参考にしながら実施ができる。

  • プロセスを特定してプロセスを終了する
    • 手順詳細はブログ記事の通りで、リソースモニターを使用する。
    • 検索したいファイルは、手元で表示されているエラー文に従えばよいが、AnypointCodeBuilderで検索すると手っ取り早い
  • 開いているポートを特定する
    • 直接的な問題解決にはならないが、なぜかポートが開いたままになっていた(私の場合は9999が開いていた)

続けてエラー詳細について触れていく。

「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」

エラーメッセージの通りで、別のプログラムがファイルだやファイルを開いている。
おそらくvs code(Anypoint Code Builderの拡張機能)が使っているのだと思うが、詳細は不明である。

特に、vs codeを停止した後でも解消されない場合があり、なかなか謎である。

EBUSY: resource busy or locked...

おそらく原因は「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」と同じと考えられる。

私の環境では、AnypointCodeBuilder\runtime\mule-enterprise-standalone-4.7.0\server-plugins\mule-dx-mule-debugger-mule-server-plugin\lib\checker-qual-2.10.0.jarがbusy or lockedとなっていた。

こちらはPC再起動をしても解消しなかった。

力技で実行する

拡張機能を経由せずに、コマンドで直接実行することもできる。
※拡張機能の"変なエラー"は回避できるかもしれない

以下の手順を実行すると、Run and Debugと同じ動きを再現できる。
{}の中は適宜自分のものに読み替えること。{version}については実際にフォルダを探しに行けばわかるはずである。

  1. java, mavenを(適切なversionで)使用できるようにしておく。
  2. mvn clean package -DskipMunitTests を実行する。
    1. プロジェクトフォルダの中にtarget/{api-name}.jarが生成されている
  3. 以下の手順により、生成されたjarファイルをruntimeに配置する。
    1. jarファイルをコピーして、C:/Users/{name}/AnypointCodeBuilder/mule-enterprise-standalone-{version}/apps配下に配置する。
    2. 配置したjarファイルの拡張子をzipに変更する(警告が出るが無視する)
    3. zipを解凍する(不要なので、zipファイル自体は削除してよい)
  4. ${env:JAVA_HOME}='C:\Users\{user}\AnypointCodeBuilder\java\jdk-{version}'; & 'C:\Users\takaf\AnypointCodeBuilder\runtime\mule-enterprise-standalone-{version}\localRuntimeExecution.ps1' '-M-Dmule.forceConsoleLog' '-M-Dmule.testingMode' '-M-XX:-UseBiasedLocking' '-M-Dfile.encoding=UTF-8' '-M-XX:+UseG1GC' '-M-XX:+UseStringDeduplication' '-M-Dcom.ning.http.client.AsyncHttpClientConfig.useProxyProperties=true' '-M-Dmule.debugger.test.port=8000' '-M-Dmule.debug.enable=true' 'console0' '-M-Dmule.debug.port=6666' '-M-Dmule.debug.enable=true' '-M-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=57744'を実行する。
    1. ${env:JAVA_HOME}=部分はpowershellのコマンドとして正しいので、そのままで(置き換えたりしないで)よい。

※公式の方法ではないので、自己責任でお願いします。
※MuleSoft standaloneの仕組みと同じはず。

その他エラー

原因がわからないが、埋め込みのMule Runtimeを再インストールするによって何とか解消したもの

アクセスが拒否された。

よくわからない。。。

Exception in thread "main" java.io.FileNotFoundException: C:\Users\{user}\AnypointCodeBuilder\runtime\mule-enterprise-standalone-4.7.0\bin\..\conf\wrapper.conf (アクセスが拒否されました。)

FileNotFoundException

よくわからない。。。

ERROR 2024-09-16 09:54:08,912 [WrapperListener_start_runner] [processor: ; event: ] org.mule.runtime.module.deployment.internal.DefaultArchiveDeployer: Failed to deploy artifact [api-name-1.0.0-SNAPSHOT-mule-application]
org.mule.runtime.deployment.model.api.DeploymentException: Failed to deploy artifact [api-name-1.0.0-SNAPSHOT-mule-application]
Caused by: org.mule.runtime.api.exception.MuleRuntimeException: org.mule.runtime.deployment.model.api.DeploymentInitException: FileNotFoundException: global.xml
Caused by: org.mule.runtime.deployment.model.api.DeploymentInitException: FileNotFoundException: global.xml

関係ないエラー

以下は、xmlファイル上でエラー表示されていたが、結局関係なかった(エラーのままでも正常に動いたもの)である。

色々試したが、mvn clean package -DskipMunitTestsの結果(OUTPUTタブに表示される内容)にエラーがなければ問題ないのだと思う。
Anypoint Code Builderがリリースされたばかりで不安定なのだろうと推測している。

※validation:allを使う際に、以下のエラーが表示される。

要素'{"http://www.mulesoft.org/schema/mule/validation":is-email}'で始まる無効なコンテンツが見つかりました。'{"http://www.mulesoft.org/schema/mule/core":annotations, "http://www.mulesoft.org/schema/mule/core":error-mapping, "http://www.mulesoft.org/schema/mule/core":abstract-validator}'のいずれかが必要です。(UNKNOWN_NAMESPACE)

まとめ

Run and Debugをするために色々苦労したが、その際のエラーと対処法をまとめた。

Anypoint Code Builderは使いやすさはあるが、まだまだ不安定な部分もあるのだと考えている。
Run and Debugで色々詰まってしまったが、アップデートされるうちに、本記事のエラーもいずれは出なくなるだろうと予想している。

Discussion