关于传统项目打成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

 结构基本一致。

 

将 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

posted @ 2019-01-05 23:24  colin220  阅读(788)  评论(0编辑  收藏  举报