用多了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)的更多相关文章

  1. maven intall在target文件夹中自动生成的war包部署服务器时缺斤少两

    1.问题描述,本地改动特别大或者升级系统操作,打war包部署服务器上程序时候,页面或者后台总是报错,原因就是比本地少东西. 2.问题排查解决:maven clean然后maven intall在tar ...

  2. 第二章 部署war包到tomcat

    以turbine为例. 一.部署 1.下载或者生成war包(从maven上下载war包,并改名字为turbine.war) 2.将turbine.war拷贝到$TOMCAT_HOME/webapps中 ...

  3. IDEA 导出项目war包

    部署 Maven 项目,使用 “mvn package” 命令出现错误,不能正确打包时的解决方法 一.最简单.最快的方式: 思路,本地能运行,直接把本地编译后能正确运行的项目文件打包,传到服务器部署即 ...

  4. 【Tomcat部署】Linux环境部署war包到tomcat

    以turbine为例. 一.部署 1.下载或者生成war包(从maven上下载war包,并改名字为turbine.war) 2.将turbine.war拷贝到$TOMCAT_HOME/webapps中 ...

  5. 用Maven部署war包到远程Tomcat服务器

    过去我们发布一个Java Web程序通常的做法就是把它打成一个war包,然后用SSH这样的工具把它上传到服务器,并放到相应的目录里,让Tomcat自动去解包,完成部署. 很显然,这样做不够方便,且我们 ...

  6. maven 打war包tomcat服务器乱码问题

    今天用maven3的命令打war包,命令是mvn clean package -Dmaven.test.skip=true,打包后放在tomcat跑起来后发现tomcat的日志出现乱码. 后来在pom ...

  7. maven web project打包为war包,目录结构的变化

    一个maven web project工程目录: 资源管理器中的目录层级如下: 导出为war包之后的目录层级为: 我们会发现,其实并没有如下的这些目录层级: 所以这两个目录层级只是IDE为我们添加的, ...

  8. Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)

    学习内容: 1.不依赖外部Tomcat,自己启动方式部署 2.Maven打war包,远程部署到centOS 3.Maven热部署(不关闭Tomcat部署应用)   做maven开发前提: 1.编码UT ...

  9. maven打成war包之后没有class文件

    用maven打了war包之后部署到tomcat下居然无法执行,看了一下原来没有任何编译的.class文件. 查了一下,是自己手欠把source的src改成src.main.java之类的目录了,但是没 ...

  10. 【转】Maven实战(五)---两个war包的调用

    原博文出自于: http://blog.csdn.net/liutengteng130/article/details/42879803    感谢! 开篇前提   1.为什么要用两个war包的调用? ...

随机推荐

  1. bzoj3367[Usaco2004 Feb]The Big Game 球赛*

    bzoj3367[Usaco2004 Feb]The Big Game 球赛 题意: n只奶牛,每只支持两个球队中的一个,它们依次上车,上到一定程度可以开走这辆车并换下一辆继续上.要求一辆车上支持不同 ...

  2. java中AQS源码分析

    AQS内部采用CLH队列.CLH队列是由节点组成.内部的Node节点包含的状态有 static final int CANCELLED =  1; static final int SIGNAL    ...

  3. Python Hacking Tools - Port Scanner

    Socket Programming 1.  Scan the target Vulnerable Server. And test it by telnet. 2. Write the scanne ...

  4. 集训作业 洛谷P1010 幂次方

    这个…… 这个题看上去有点难的样子. 仔细看看,感觉有点简单.啊,是递归啊,正经的看一看,好像是把一个数分成2的几次方的和. 然后余数和比他小的最大的2的次方数如果不是2的一次方或者2的0次方,就继续 ...

  5. 获取字符串指定字符的第n次出现位置

    create function uf_findx (@text nvarchar(max),@find_x varchar(200),@find_n int)returns intasbegin -- ...

  6. 手把手带你玩转 DialogFragment

    前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 思维导图 一.为什么要学习 DialogFragment 你还在用 Dialog 吗? 你还在经常烦恼 ...

  7. 图论相关知识(DFS、BFS、拓扑排序、最小代价生成树、最短路径)

    图的存储 假设是n点m边的图: 邻接矩阵:很简单,但是遍历图的时间复杂度和空间复杂度都为n^2,不适合数据量大的情况 邻接表:略微复杂一丢丢,空间复杂度n+m,遍历图的时间复杂度为m,适用情况更广 前 ...

  8. 01 . Git常用命令及方法和分支管理

    原理 # Workspace:工作区 # Index / Stage:暂存区 # Repository:仓库区(或本地仓库) # Remote:远程仓库 本地分支关联远程 git branch --s ...

  9. 前端学习(十七):JavaScript常用对象

    进击のpython ***** 前端学习--JavaScript常用对象 JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等 在JavaScript中,对象是拥有属性和方法的数据 ...

  10. nginx Dockerfile

    FROM centos MAINTAINER zengxh RUN yum install -y epel-release vim pcre-devel wget net-tools gcc zlib ...