今天在集成Camunda 到Spring Cloud 微服務中的時候出現了 org.camunda.bpm.engine.rest.exception.rest.exception.RestException:It was not able to load the following file 'app/plugin.js' 異常。
剛開始以爲是Spring boot 對靜態資源訪問的限制問題,添加WebMVC的靜態資源的映射配置,但是沒有任何作用。
根據異常棧信息找到發生異常類,發現這個不是一個靜態資源訪問題,而是Rest請求,如圖:
後在Camunda的論壇中找到了解決方案:
要解決這個問題,需要配置Idea Run/Debug Configuration 中的 shorten command line 選項:
我的默認是 none,選擇 classpath file 解決了這個問題.
那麼 shorten command line 是做什麼用的呢?
如果類路徑太長,或者有許多VM參數,程序就無法啓動。原因是大多數操作系統都有命令行長度限制。在這種情況下,IntelliJIDEA將試圖縮短類路徑。
shorten command line 選項提供三種選項縮短類路徑。
none:這是默認選項,idea不會縮短命令行。如果命令行超出了OS限制,這個想法將無法運行您的應用程序,但是工具提示將建議配置縮短器。
JAR manifest:idea 通過臨時的classpath.jar傳遞長的類路徑。原始類路徑在MANIFEST.MF中定義爲classpath.jar中的類路徑屬性。
classpath file:idea 將一個長類路徑寫入文本文件中。
進一步分析:
Camunda Cockpit Plugin 的靜態資源是在Jar 包中的,所以訪問jar包中靜態資源,例如 /app/plugin.css 或者 /app/plugin.js ,一般是 /.../resource.jar!/META-INF/resources/plugin/cockpit/app/plugin.css. 如果OS 操作系統受限,就可能會訪問不到資源文件。
所以,需要調整類路徑的訪問方式,就可以解決這個問題。
以上是個人的理解,如果有不對的地方,還請大家指正^_^
參考文獻:
https://forum.camunda.org/t/camunda-cockpit-plugin-produces-404-error-for-version-7-11/16788/2