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

Posted colin220

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于传统项目打成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

 

结构基本一致。

End

以上是关于关于传统项目打成war包的的分析的主要内容,如果未能解决你的问题,请参考以下文章

Java中的JAR/EAR/WAR包的文件夹结构说明(转)

SpringBoot之打成war包部署到Tomcat

05_SpringBoot打jar/war包解决第三方依赖jar包的问题

关于war包 jar包 ear包 及打包方法

如何将一个SpringBoot简便地打成一个war包(转)

springboot 发布 war jar区别