1. 程式人生 > >關於傳統專案打成war包的的分析

關於傳統專案打成war包的的分析

技術在不斷的革新,以前的專案沒有jar管理工具時,都是手動將依賴的jar拷貝到專案之下,然後Build Path,之後Maven出現了,出現了jar包中央倉庫,所有的jar包資源集中在這裡,免去頻繁去網路上查詢jar包的麻煩。Maven採用座標對一個jar進行定位,使每個jar包在中央倉庫中有唯一標識。後面出現的Gradle,原理和Maven類似,且有更多的新特性。

說回傳統專案,通過Eclipse建立一個動態web專案(Dynamic Web Project),其目錄結構如下:

│  .classpath
│  .project
│  
├─.settings
│      .jsdtscope
│      org.eclipse.jdt.core.prefs
│      org.eclipse.wst.common.component
│      org.eclipse.wst.common.project.facet.core.xml
│      org.eclipse.wst.jsdt.ui.superType.container
│      org.eclipse.wst.jsdt.ui.superType.name
│      
├─build
│  └─classes
├─src
└─WebContent
    ├─META-INF
    │      MANIFEST.MF
    │      
    └─WEB-INF
        │  web.xml
        │  
        └─lib
 

以點開頭的檔案或者資料夾:classpath project settings等都是由Eclipse建立,一般忽略不上傳到git中(gitignorehttps://stackoverflow.com/questions/44657300/what-project-files-are-supposed-to-ignore-in-gitignore-file

build 是編譯後放class檔案的位置,這是Eclipse配置,可以修改,一般部署到Tomcat中後 class檔案會放在WEB-INF/classes中(https://blog.csdn.net/tony_java_2017/article/details/80839313

src 原始碼檔案

WebContent web專案的根目錄資料夾(MyEcplise建立的話是WebRoot,二者沒有本質區別 https://blog.csdn.net/u013938165/article/details/21613573

專案打成war包後放到tomcat中,啟動tomcat專案會被解壓,解壓後的檔案如下:

│  
├─META-INF
│      MANIFEST.MF
│      
└─WEB-INF
    │  web.xml
    │  
    ├─classes
    └─lib

結構和WebContent一致,src中的原始碼編譯後放在了classes資料夾下。

後面的SpringBoot直接內部集成了Tomcat容器,打成jar包就可以執行。不過實際情況也有將SpringBoot打成war包放在Tomcat中執行,不過失去了SpringBoot的一些特性,將SpringBoot專案打成war包後可以看到結構如下:

│  
├─META-INF
│  │  MANIFEST.MF
│  │  
│  └─maven
│      └─com.company
│          └─electric
│                  pom.properties
│                  pom.xml
│                  
├─org
│  └─springframework
│      └─boot
│          └─loader
│              │  ExecutableArchiveLauncher$1.class
│              │  ExecutableArchiveLauncher.class
│              │  JarLauncher.class
│              │  ...
│              │  
│              ├─archive
│              │      Archive$Entry.class
│              │      Archive$EntryFilter.class
│              │      Archive.class
│              │      ...
│              │      
│              ├─data
│              │      ByteArrayRandomAccessData.class
│              │      RandomAccessData$ResourceAccess.class
│              │      RandomAccessData.class
│              │      ...
│              │      
│              ├─jar
│              │      AsciiBytes.class
│              │      Bytes.class
│              │      CentralDirectoryEndRecord.class
│              │      ...
│              │      
│              └─util
│                      SystemPropertyUtils.class
│                      
└─WEB-INF
    ├─classes
    │  │  application.properties
    │  │  
    │  └─com
    │      └─company
    │          └─electric
    │              │  ElectricApplication.class
    │              │  
    │              └─controller
    │                      IndexController.class
    │                      
    ├─lib
    │      classmate-1.3.4.jar
    │      hibernate-validator-5.3.6.Final.jar
    │      jackson-annotations-2.8.0.jar
    │      ...
    │      
    └─lib-provided
            spring-boot-starter-tomcat-1.5.13.RELEASE.jar
            tomcat-annotations-api-8.5.31.jar
            tomcat-embed-core-8.5.31.jar
            tomcat-embed-el-8.5.31.jar
            tomcat-embed-websocket-8.5.31.jar

 

結構基本一致。

End