关于传统项目打成war包的的分析

技术在不断的革新,之前的项目没有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中(gitignorehttps://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/80839313spring

src 源码文件api

WebContent web项目的根目录文件夹(MyEcplise建立的话是WebRoot,两者没有本质区别 https://blog.csdn.net/u013938165/article/details/21613573tomcat

项目打成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

相关文章
相关标签/搜索