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包的调用? ...
随机推荐
- HotSpot VM垃圾收集器
最常用的HotSpot VM垃圾收集器是分代垃圾收集.该方案是基于两个观察事实. 大多数分配对象的存活时间很短. 存活时间久的对象很少引用存活时间短的对象. 上述两个观察事实统称为弱分代假设(Weak ...
- Producter and Consumer
package pinx.thread; import java.util.LinkedList; import java.util.Queue; public class ProducerConsu ...
- Spring升级案例之IOC介绍和依赖注入
Spring升级案例之IOC介绍和依赖注入 一.IOC的概念和作用 1.什么是IOC 控制反转(Inversion of Control, IoC)是一种设计思想,在Java中就是将设计好的对象交给容 ...
- bzoj3378[Usaco2004 Open]MooFest 狂欢节*
bzoj3378[Usaco2004 Open]MooFest 狂欢节 题意: n只奶牛,第i只听力为vi,坐标为xi,两只奶牛聊天时音量是max(vi,vj)*abs(xi-xj).求n(n-1)/ ...
- Python Ethical Hacking - WEB PENETRATION TESTING(4)
CRAWING SPIDER Goal -> Recursively list all links starting from a base URL. 1. Read page HTML. 2. ...
- DJANGO-天天生鲜项目从0到1-003-用户模块-登录
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- 剑指offo记录
一.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是 ...
- intellij IDEA导入maven项目
一.导入maven项目 1.打开intellij idea,点击File(如下图1),然后点击Open(如下图2)
- 基于Bilateral Attention和Pyramid Filling Block的图像修复方法
One-Stage Inpainting with Bilateral Attention and Pyramid Filling Block 论文链接:https://arxiv.org/abs/1 ...
- hostapd阅读(openwrt)-2
深入追踪openwrt下的hostapd之后,发现openwrt无线管理机制格外的复杂,几乎所以的触发与回调均离不开ubus,关于ubus这里不作解释,先大概了解其用途即可(出门左转:https:// ...