用多了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. 移除hmtl5 input type=“number”的step验证

    设置 step="any"例如:<input type="number" step="any" value=""& ...

  2. 【Python学习笔记六】获取百度搜索结果以及百度返回“百度安全验证”问题解决

    1.获取百度搜索结果页面主要是修改百度搜索url中的参数实现,例如查询的关键字为wd: 举例:https://www.baidu.com/s?wd=python",这样就可以查询到‘pyth ...

  3. Maven配置文件中的版本使用-SNAPSHOT

    SNAPSHOT是什么? SNAPSHOT是快照,是一种特殊的版本,制定了某个当前的开发进度副本.不同于正式版本,Maven每次构建都会在远程仓库中检查新的快照.如此每次发布更新代码的快照到仓库中,新 ...

  4. Python协程之Gevent模块

    背景 进程是操作系统分配资源的最小单位,每个进程独享4G的内存地址空间,因此进程内数据是安全的,检查间的通信需要使用特定的方法.同理,正是因为进程是数据安全的,所以导致进程的切换是一个很麻烦效率不高的 ...

  5. C++语法小记---面向对象模型(实例的内存分布)

    面向对象的模型(内存分布) 对于一个对象而言,成员变量和成员函数是分开存放的 成员函数位于代码段,所有的类对象共有 成员变量为每一个对象独有,位于内存中 类对象在内存中的分布和struct完全相同 对 ...

  6. elementUI 级联选择框 表单验证

    今天遇到了一个需求:进行级联选择框的表单验证,突然有点懵逼.感觉应该和正常的表单验证类似,但不是很清晰,后来还是在博客园找到了相关参考文章. 先上代码: <el-form :model=&quo ...

  7. leetcode题库练习_左旋转字符串

    题目:左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返 ...

  8. springboot(4)Druid作为项目数据源(添加监控)

    参考博客:恒宇少年:https://www.jianshu.com/p/e84e2709f383 Druid简介 Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JD ...

  9. nginx里的变量,实现简单过滤。

    1,nginx内置变量 nginx 有很多内置变量可以进行简单的过滤. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...

  10. 中缀转逆波兰表达式 c++ 队列,栈

    记得早在几十天以前,xty 学长曾让我学这个.一直推到了现在哈 咕咕咕(能鸽善鹉orz) 抱歉,学妹我来还愿了! 中缀表达式比较适合人类的计算,但是后缀表达式更适合机器计算(毕竟没有那么多运算符优先级 ...