學習Java Web,學到将WAR包部署到Tomcat中時,遇到一個問題。
部署WAR包的過程本身沒什麼問題,把.war檔案放在<Tomcat安裝目錄>/webapps/中,然後修改<Tomcat安裝目錄>/conf/server.xml,過程很順利。因為是部署多個WebApp,每個WebApp都是基于根路徑開發的,是以就在<Host name="localhost">後面增加了幾個<Host>:
<Host name="localhost" ……>
……
</Host>
<Host name="my-web-app.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase="my-web-app" path="/" />
</Host>
……
通過startup.bat啟動Tomcat,部署的WebApp都能正常通路。
但是,再回到IDEA中(自己手動啟動的Tomcat程序已關閉),通過IDEA啟動Tomcat就報錯了,關鍵日志如下:
……
Caused by: java.lang.IllegalArgumentException: 指定的主資源集 [C:\Users\tianlin\AppData\Local\JetBrains\IntelliJIdea2021.2\tomcat\643078ef-a97d-4f46-a4c3-5a50080f0431\webapps\my-web-app] 無效
……
可見,雖然我隻想關注localhost主機的WebApp(即IDEA中正在開發的項目),但我在Tomcat安裝目錄中部署的這個my-web-app也存在于IDEA啟動的這個Tomcat程序的配置之中,而且正是因為新增的<Host>導緻了Tomcat無法啟動。
- 部署時<Host>使用絕對路徑。這種方案下,在IDEA中運作Tomcat時,除了localhost之外的其他Host也都能正常通路到。
<Host name="my-web-app.com" appBase="C:\Users\tianlin\Java\apache-tomcat-8.5.70\webapps\my-web-app" unpackWARs="true" autoDeploy="true"> <Context docBase="/" path="" /> </Host>
- 部署用的Tomcat環境和IDEA開發用的Tomcat環境分離,各自使用不同的目錄。