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

  • 相关阅读:
    odoo开发笔记 -- 后台代码什么时候需要注意编码格式
    mysql添加类似oracle的伪列及查看表信息
    windows10升级系统后,无法远程桌面连接服务器
    时间管理
    odoo开发笔记 -- odoo仪表板集成hightcharts
    odoo开发笔记 -- odoo10 视图界面根据字段状态,动态隐藏创建&编辑按钮
    odoo开发笔记 -- odoo源码下载地址(非官方)
    odoo开发笔记 -- 异常信息处理汇总
    macbook 安装oracle RAC
    ubuntu升级pip后, ImportError: cannot import name ‘main‘
  • 原文地址:https://www.cnblogs.com/colin220/p/10189145.html
Copyright © 2020-2023  润新知