idea如何打war包(不使用maven)
用多了maven的小伙伴,应该快忘了怎么不用maven打war包了吧,我也快忘了,所以趁我还记得,赶紧记录下来,多年后,当我回忆起往事........
而且网上的教程也太坑了吧,牛头不搭马嘴,这害死多少人啊,可能是我理解能力不好吧,怪我。
这里以打包web工程:TomcatFilterTest2为例
第一步:进入打包界面,下面两种方法,选其一


Ps:有点人的工具栏可能是这样的:
那是因为你没有勾选视图view下的工具条:

第二步,点击Artifacts,Artifacts是工程组件的意思。可以理解为一个工程中的各个模块。(ps:如果你要打包的web的工程在idea的tomcat部署运行过,那么就会出现,例如下图,我要打包的模块在tomcat运行过,所以会有所记录,有记录的建议跳过第三步,直接看第四步)

第三步,手动选择需要打包的模块


选择要打包的模块:TomcatFilterTest2,然后点击ok

这样就出现了:

第四步:这里的Archive是档案馆的意思,我们打war包就是为了存档起来嘛,也就是打war的意思,然后选择我们刚刚选择的那个模块


- Name:是war包的名字,可以自己随意定义
- Type:是类型,这里是Archive的类型,也就是war包的类型
- Output directory:是war包存储的位置,可以随意修改,找一个好找的位置存储即可
- Include in project build:如果把这个选项勾选,说明当当前的这个模块修改了代码或者啥的,重新编译了之后,这个war包也会同步更新修改
- Output Layout:是输出布局,也就是war包的目录结构,这里选择了TomcatFilterTest2模块,自然war包最后的结构是和TomcatFilterTest2模块的webapps下的目录结构是一样的。
其他的选项作用不是那么大,况且我也不是那么清楚,就不介绍了。至于左下角的提示:META-INF/MANIFEST.MF文件没找到也不必理会,这个文件里主要存储了主类,也就是有main方法那个类的所在的位置,这个文件对于java普通工程的打jar包有用,对于打war包,有没有都不影响,所以这里直接选择:Apply-->ok
第五步:编译war包


- All Artifact:对所有模块进行操作
- Build:进行编译打包
- Rebuild:重现编译打包,会删除原来的war包,然后编译打包
- Clean:清除war包
- Edit:重新编辑war包的设置
这里我们选择刚刚的war包,然后点击Build,查看idea信息窗口:

提示编辑已经成功完成后,可以到打包输出窗口查看war包了



对比:

这个iml文件是这个模块在idea中的一个配置文件,里面主要记录了这个模块与当前工程的一个绑定信息(相等于工程给模块颁发的一个身份证吧),在打war包的时候是不会打包进去的。
对比目录,可以发现,多了一个classes文件夹,这个classes文件夹是打包的时候自动帮我们创建的,主要存放的是src目录下对应的类的class文件,当部署到服务器的时候,服务器就会从这个文件夹中读取可执行的类文件。如果我们自己手动在WEB-INF下建一个classes文件夹的话,那么打包的时候,检测到已经有这个文件夹就不会再创建,然后把src对应结构下的类编译,然后把class文件存储进去。
经过war包与src目录下的结构对比,知道web默认的目录结构还是挺重要的,因为在打包的时候,idea会去找src目录下的对应的类进行编译。
- 如果src不是源目录,也可以但是名字必须叫:src,这样打包的时候也会去src目录下面找对应的类编译然后将class文件存储进classes文件夹中
- 如果不想叫src目录,也可以,但是必须将这个文件夹定义为源目录:这样也可以找得到。但是!如果你既不定义目录名为src又不定义这个名字不为src的目录为根目录,那么打包的时候,就不知道从哪里找文件了,classes文件夹中就会是空的。那将war包部署到服务器的时候就会报找不到文件的错误
那么如何设置文件夹为根目录呢?
对要设置为根目录的文件夹右键:

或者:


顺便再说一句,所以我们在创建web项目的时候,在WEB-INF下创建classes目录是没有必要的,因为打包的时候会自动帮我们添加上,但是也可以指定项目运行时的编译输出路径吧,方便查看嘛。
war包的内容都是从exploded里面复制的,所以啊如果war包打包发现少东西了,一般都是这个exploded里少了,需要手动粘贴缺少的文件到exploded中,再重新打包。一般我们部署文件到浏览器进行测试的时候,都是部署exploed文件,因为这个文件有着war包一样的目录结构(其实war包就是按照这个文件的内容打包的,能不一样吗),但它更易于修改,在测试的时候我们都需要频繁的修改代码,如果使用war包,修改的速度会慢些,并且修改后不太容易看见war包里面的修改情况。所以一般都用exploded类型测试,等到测试完毕后,再进行最后的打war包。至于更进一步的区别,可以去百度一下。

我们还没打war包的时候,在idea上部署到服务器的就是exploded类型。如果我们在idea模块中添加了文件,但是在运行的时候发现找不到文件,这个时候就需要到exploded所在的文件看下这个文件在不在,一般都是没有对这个exploded文件及时进行更新导致的。
jar包和war包的区别可以参考以下链接:
https://www.cnblogs.com/lvhouhou/p/11907738.html


既然war包已经打好,那么如何手动部署运行呢?
首先启动服务器,这里是启动tomcat服务器,然后复制打包好的war到tomcat目录下的webapps文件夹下,即可自动解压war包,并自动运行。

那么,这个原理又是什么,为什么只要复制war包到这里就能自动解压和自动部署,这就要看tomcat目录的conf文件夹下的server.xml配置了:

- name:配置主机名
- appBase:这里写相对于servlet.xml所在文件夹也就是conf文件夹的相对路径,也就是应用的主要目录,每次访问这个主机,都会到这个主要目录找可执行的web应用,所以要将war包复制到webapps这个文件夹里
- unpackWARs:设置appBase文件夹下的应用是否打包,这里是true,说明了主要我们复制war包过来,就会自动帮我们解压
- autoDeploy:是否自动部署,这里也是true,只要有web项目,就会自动的帮我们部署到服务器
idea如何打war包(不使用maven)的更多相关文章
- maven intall在target文件夹中自动生成的war包部署服务器时缺斤少两
1.问题描述,本地改动特别大或者升级系统操作,打war包部署服务器上程序时候,页面或者后台总是报错,原因就是比本地少东西. 2.问题排查解决:maven clean然后maven intall在tar ...
- 第二章 部署war包到tomcat
以turbine为例. 一.部署 1.下载或者生成war包(从maven上下载war包,并改名字为turbine.war) 2.将turbine.war拷贝到$TOMCAT_HOME/webapps中 ...
- IDEA 导出项目war包
部署 Maven 项目,使用 “mvn package” 命令出现错误,不能正确打包时的解决方法 一.最简单.最快的方式: 思路,本地能运行,直接把本地编译后能正确运行的项目文件打包,传到服务器部署即 ...
- 【Tomcat部署】Linux环境部署war包到tomcat
以turbine为例. 一.部署 1.下载或者生成war包(从maven上下载war包,并改名字为turbine.war) 2.将turbine.war拷贝到$TOMCAT_HOME/webapps中 ...
- 用Maven部署war包到远程Tomcat服务器
过去我们发布一个Java Web程序通常的做法就是把它打成一个war包,然后用SSH这样的工具把它上传到服务器,并放到相应的目录里,让Tomcat自动去解包,完成部署. 很显然,这样做不够方便,且我们 ...
- maven 打war包tomcat服务器乱码问题
今天用maven3的命令打war包,命令是mvn clean package -Dmaven.test.skip=true,打包后放在tomcat跑起来后发现tomcat的日志出现乱码. 后来在pom ...
- maven web project打包为war包,目录结构的变化
一个maven web project工程目录: 资源管理器中的目录层级如下: 导出为war包之后的目录层级为: 我们会发现,其实并没有如下的这些目录层级: 所以这两个目录层级只是IDE为我们添加的, ...
- Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)
学习内容: 1.不依赖外部Tomcat,自己启动方式部署 2.Maven打war包,远程部署到centOS 3.Maven热部署(不关闭Tomcat部署应用) 做maven开发前提: 1.编码UT ...
- maven打成war包之后没有class文件
用maven打了war包之后部署到tomcat下居然无法执行,看了一下原来没有任何编译的.class文件. 查了一下,是自己手欠把source的src改成src.main.java之类的目录了,但是没 ...
- 【转】Maven实战(五)---两个war包的调用
原博文出自于: http://blog.csdn.net/liutengteng130/article/details/42879803 感谢! 开篇前提 1.为什么要用两个war包的调用? ...
随机推荐
- 1.对Java平台的理解。“Java是解释执行”对吗
Java本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”,能够非常容易地获得跨平台能力: 另外就是垃圾收集(GC),Java通过垃圾收集器(Garbage Colle ...
- 用Vue实现一个简单的图片轮播
本文已收录至https://github.com/likekk/studyBlog欢迎大家star,共同学习,共同进步.如果文章有错误的地方,欢迎大家指出.后期将在将GitHub上规划前端学习的路线和 ...
- 小白从零开始阿里云部署react项目+node服务接口(二:node服务+web)
我们用极简的方式来创建服务,没有任何附加功能 1 新建一个server文件夹 2 使用npm init 或者yarn init 一路enter 3 yarn add express cors ...
- Ethical Hacking - NETWORK PENETRATION TESTING(18)
Session Hijacking What if the user uses the "remember me" feature? If the user uses this f ...
- 【bfs+链式向前星】防御僵尸(defend)计蒜客 - 45288
题目: A 国有 n 座城市,n−1 条双向道路将这些城市连接了起来,任何两个城市都可以通过道路互通. 某日,A 国爆发了丧尸危机,所有的幸存者现在都聚集到了 A 国的首都(首都是编号为 1 的城市) ...
- 015.Nginx重定向
一 重定向概述 1.1 重定向介绍 重定向(Redirect)指通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向.域名的重定向.路由选择的变化也是对数据报文经由路径的一种重定向). ...
- element-ui设置级联选择器表单验证
data(){<el-form :model="ruleForm" :rules="rules" ref="ruleForm" lab ...
- @Autowired @Qualifier
spring2.1中允许用户通过@Autowired注解对Bean的属性变量.属性Setter方法以及构造函数进行标注,配合AutowiredAnnotationBeanProcessor完成Bean ...
- JVM系列之:对象的锁状态和同步
目录 简介 java对象头 java中锁状态的变化 偏向锁biased locking 轻量级锁thin lock 重量级锁 三种锁状态的不同 简介 锁和同步是java多线程编程中非常常见的使用场景. ...
- 前端学习(五):body标签(三)
进击のpython ***** 前端学习--body标签 接下来的内容就比较多了,各位看官且听我慢慢道来... ... 使用a标签,链接到另一个页面 网页中<a>标签,全称:anchor. ...