技術在不斷的革新,之前的項目沒有jar管理工具時,都是手動將依賴的jar拷貝到項目之下,而後Build Path,以後Maven出現了,出現了jar包中央倉庫,全部的jar包資源集中在這裏,免去頻繁去網絡上查找jar包的麻煩。Maven採用座標對一個jar進行定位,使每一個jar包在中央倉庫中有惟一標識。後面出現的Gradle,原理和Maven相似,且有更多的新特性。java
說回傳統項目,經過Eclipse建立一個動態web項目(Dynamic Web Project),其目錄結構以下:git
│ .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-fileweb
build 是編譯後放class文件的位置,這是Eclipse配置,能夠修改,通常部署到Tomcat中後 class文件會放在WEB-INF/classes中(https://blog.csdn.net/tony_java_2017/article/details/80839313)spring
src 源碼文件api
WebContent web項目的根目錄文件夾(MyEcplise建立的話是WebRoot,兩者沒有本質區別 https://blog.csdn.net/u013938165/article/details/21613573)tomcat
項目打成war包後放到tomcat中,啓動tomcat項目會被解壓,解壓後的文件以下:websocket
│ ├─META-INF │ MANIFEST.MF │ └─WEB-INF │ web.xml │ ├─classes └─lib
結構和WebContent一致,src中的源碼編譯後放在了classes文件夾下。網絡
後面的SpringBoot直接內部集成了Tomcat容器,打成jar包就能夠運行。不過實際狀況也有將SpringBoot打成war包放在Tomcat中運行,不過失去了SpringBoot的一些特性,將SpringBoot項目打成war包後能夠看到結構以下:app
│ ├─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
結構基本一致。dom
將 SpringBoot 項目打成 jar 包後,其目錄結構以下:
│ ├─BOOT-INF │ ├─classes │ │ │ application-dev.properties │ │ │ application-pro.properties │ │ │ application.properties │ │ │ │ │ └─com │ │ └─company │ │ └─fetch │ │ │ FetchPropertiesApplication.class │ │ │ │ │ └─controller │ │ IndexController.class │ │ │ └─lib │ classmate-1.4.0.jar │ hibernate-validator-6.0.13.Final.jar │ jackson-annotations-2.9.0.jar │ jackson-core-2.9.7.jar │ ... │ ├─META-INF │ │ MANIFEST.MF │ │ │ └─maven │ └─com.company │ └─fetch_properties │ pom.properties │ pom.xml │ └─org └─springframework └─boot └─loader │ ExecutableArchiveLauncher.class │ PropertiesLauncher$ArchiveEntryFilter.class │ PropertiesLauncher$PrefixMatchingArchiveFilter.class │ PropertiesLauncher.class │ .... │ ├─archive │ Archive$Entry.class │ Archive$EntryFilter.class │ Archive.class │ ... │ ├─data │ RandomAccessData.class │ RandomAccessDataFile$1.class │ RandomAccessDataFile$DataInputStream.class │ ... │ ├─jar │ AsciiBytes.class │ Bytes.class │ CentralDirectoryEndRecord.class │ ... │ └─util SystemPropertyUtils.class
INSERT