關於傳統專案打成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中(gitignore)https://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