java教程 關於idea對javaweb項目的編譯打包配置詳細說明 和 deployment source 'xxx:war exploded' is not valid全面分析

基於maven的javaweb目錄結構

如果你創建的maven項目的目錄比我標出來的少,按照我展示的目錄結構新增文件結構即可。

|--- pom.xml
|--- web
      |--- META-INF
      |--- WEB-INF
              |--- web.xml
|--- src
      |--- main
             |--- java
                    |--- package(com.mz)
                                |--- controller
                                |--- service
                                |--- serviceImpl
                                |--- mapper
                                |--- entity
                                |--- utils
                                |--- config
             |--- source
                  |--- 各種資源文件,最終會被編譯到classes目錄

      |--- test
            |--- java
                  |--- package(com.mz)


idea javaweb的編譯設置說明

如果不是springboot項目,那麼需要依賴外部的tomcat來啓動併發布項目。

步驟有三個:

  • 配置idea編譯javaweb項目。
  • 配置idea編譯並且生成產品artifact。
  • 將artifact發佈到外部的tomcat。


配置idea編譯javaweb項目

步驟:右鍵項目,點擊Project structure。這個就是配置idea爲項目進行編譯以及生成打包文件配置的地方。(mac的idea,project structure在菜單File中)
在這裏插入圖片描述

  • Project概念

    • idea中的project,並不是代表當前項目的意思,而是表示項目空間,是多個項目的集合。相當於eclipse的workspace。
    • project中用於指定所有項目的jdk版本,以及所有項目編譯文件輸出目錄。
    • project中只用於配置jdk版本即可。當然你會發現有個橙色的out目錄,是由這裏的配置生成的。


      在這裏插入圖片描述
  • Modules概念 – 掌管當前項目中的所有編譯配置

    • modules就是配置本項目的位置。new Module或者import module就是導入一個項目進來進行配置。
    • 你對當前項目中的所有編譯配置(項目編譯成class文件)都在modules中。看上圖’spring-test’表示當前項目。‘web’表示這是個javaweb項目。
    • 點擊‘spring-test’, sources用於指定項目中的文件目錄代表何種資源。比如藍色的sources表示該目錄是源碼文件,目錄中的java文件會被編譯成class字節碼文件。綠色的tests表示是單元測試文件。Resources表示是項目依賴的資源文件,會被拷貝到編譯後的classes目錄下。Excluded表示這個目錄不需要處理。
    • 點擊‘spring-test’,Paths用於配置編譯後的文件位置,這裏僅僅指定項目編譯文件的輸出目錄。就是項目編譯運行時,會出現一個橙色目錄Target的原因。這裏的paths設置不會影響項目的打包以及發佈。就是說項目出現的部署錯誤,跟這裏絕對沒關係。生成後的target目錄也是可以刪除的
    • 點擊‘spring-test’,Dependencies目錄表示本項目依賴的第三方庫。一般maven的項目會自動導入。如果是本地的jar包,可以點擊+進行導入。
    • 點擊’Web’, 這裏是對本項目的web配置,Deployment Descriptors用於指定web.xml的位置。 Web resource Directories擁有指定javaweb的web目錄。

  • Libraries 概念
    這裏是Modules中的Paths的配置,建議在modules中配置即可。

  • Facets 概念
    這裏是對Module中Web的配置,建議在modules中配置即可。

  • Artifacts 概念
    這裏就是對編譯後的文件打包的配置。如果沒有artifact,點擊+號,然後選擇exploded(表示可以直接在toomcat運行的文件目錄,即war包在tomcat解壓的目錄)。 如果是要打成war包,選擇Archive。

    • 這裏需要注意 ‘Output directory’,/Users/mengze/Desktop/spring-test/out/artifacts/spring_test_war_exploded這個就是 打包文件的目錄。
    • 關於WEB-INF, classes, lib,以及 web facet都不用更改。 其中WEB-INF就是javaweb項目中根目錄中的WEB-INF, classes表示編譯後的java文件目錄。 lib表示jar庫文件目錄。web facet表示web目錄下的文件。


配置idea編譯並且生成產品artifact

Artifacts上其實點擊+號就能正確生成。不過說明下目錄的作用

|--- WBE-INF
       |--- classes    
               |--- xxx compile output 這裏存放被sources標記的文件編譯目錄。只有被編譯的文件纔會被編譯並且放到這個文件中。sources中如果有xml等資源文件,是不會被複制到classes中的。如果sources中存在資源文件,可以使用maven預編譯進行資源文件複製配置。
     
      |--- lib 這個是第三方庫的目錄。maven引入的庫自動導入到其中。如果有依賴本地的jar包,可以在lib中查看是否已經導入。
       
      |--- facet resources 這是是項目源碼中對應的web目錄下的資源文件,比如index。html, web.xml,  jsp目錄等。編譯到項目的WEB-INF目錄下。     
      


將artifact發佈到外部的tomcat

在這裏插入圖片描述
點擊Unamed,點擊Edit Configurations。
在這裏插入圖片描述
將本地tomcat與當前項目的發佈包Artifacts進行綁定的位置就是Deployment, 點擊+號,然後選擇 exploded就行。這樣發佈包的部署就設置完成。

另外,注意Application Context, 表示訪問的上下文。 比如設置 /root , 那麼訪問接口就變成了 http://localhost:8080/root/xxxx 。



關於Configuration Error: deployment source ‘xxx:war exploded’ is not valid錯誤 分析

上面對編譯,打包,部署在idea中的配置位置都做了說明。

  • 錯誤的介紹:
    部署的資源包是無效(不可用)的。

  • 下面來分析錯誤能出現的原因以及位置。
    • 原因1:編譯階段的問題 ==> java源程序編譯不過去。導致沒有生成Artifacts,所以部署就會報 ‘war不可用’。這個是代碼問題 或者 project structure中 modules配置問題
    • 原因2:打包階段的問題 ==> 沒有在project structure中的Artifacts中去配置 exploded,根本就沒有生成artifact。這個是’project structure中 artifacts’配置問題
    • 原因3:發佈階段的問題 ==> 雖然正確生成了artifact,但是Edit configuration中的deployment沒有與該artifa綁定。 這個是Edit Configurations中deployment的配置問題

    • 還補充一個新手容易出現的問題。雖然不是上面的問題,但是會在正確部署沒有報錯之後,依然404的問題。
      • 使用springmvc時,有些人會配置(比如我)攔截所有的請求,然後發現訪問localhost:8080訪問不到index.html文件。以及訪問第一個@requestMapping(“/hello”)對應的接口時,也出現了404,因爲處理器方法返回的string,是對應的/WEB-INF/jsp/下的success.jsp文件,因爲沒有創建success.jsp文件而報錯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章