`
white_crucifix
  • 浏览: 96900 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

IntelliJ使用指南—— 深入理解IntelliJ的Web部署逻辑

阅读更多
    这篇文章是先简单介绍一下这个过程,然后再谈一下如何简化这个过程的,最后说一个遇到的意想不到的问题。

    首先摆出一个项目的目录结构图吧,由于IDE内部的结构树会隐藏一些中间临时目录,所以换成sublime来展示。
   

    说明:从上到下,.idea和.settings分别是intelliJ和eclipse的相关依赖。build目录是class文件输出路径,这一点默认和eclipse是一样的。out目录是所谓artifact输出路径,即提供给tomcat的web程序目录,具体的web根目录就是下级的web_test_Web_explorded。接着下面就是src和WebContent两个开发目录也很常规。
   
   那么,当你点击运行tomcat时,在默认设置下,就开始做以下事情

  • 编译, intelliJ在保存/自动保存后不会做编译,不像eclipse的保存即编译,因此在运行server前会做一次编译。图标是一个含有00 01 10字样的,非常形象。编译后class文件存放在build目录下。
  • 创建Artifact目录结构
  • 拷贝web根目录(WebContent)下的所有文件到out/artifacts/web_test_Web_explorded/下,即artifact目录下
  • 拷贝build下的classes目录到artifact下的WEB-INF下
  • 拷贝lib目录下所需的jar包到artifact下的WEB_INF下
  • 运行server,运行成功后,如有需要,会自动打开浏览器访问指定url


    我们看到整个过程中,有着多次的拷贝行为,这个过程的目的就是为了让编译目录,资源目录和运行目录分开。同时,开发阶段的目录也无法让tomcat识别,比如classes放在了build目录下。所以若我们想要简化这个过程,就是需要减少拷贝的行为次数。

    这个简化的结果并不会带来真正意义上的效率提高,因为IDE不会笨到每次拷贝都是全量拷贝。因此,今天我们的行为更像是一种加深web开发理解,熟悉IDE选项配置的过程。

    目前tomcat所识别的web根目录为out/artifacts/web_test_Web_explorded/,如果我们能将这个指向换成我们的开发目录WebContent,就可以省下拷贝到artifact的过程;另外,WebContent下没有classes目录,所以我们要将编译输出路径改为WebContent/WEB-INF下,让输出的class文件直接放入WEB-INF下。

   进入项目的设置窗口Project Structure(选中项目名按F4)

   在Output path输入框中,原始值如下图高亮处。需要修改编译输出路径为:F:/work_spaceweb_test/WebContent/WEB-INF/classes


 
   在Output directory输入框中(忘打高亮了),修改Artifact的输出路径为:F:/work_spaceweb_test/WebContent/



   这样一来,我们就不需要额外的build目录和target目录了,这是我们最熟悉的eclipse思维。

  



   下面讲一下一个一般情况下不需要去关注的目录。当tomcat运行起来后,在console会输出log信息,其中有一条是:
引用
Using CATALINA_BASE:   "C:\Users\Dev\.IntelliJIdea13\system\tomcat\Unnamed_web_test"

   在这个目录下,放置了tomcat配置,如context.xml, server.xml等,这些配置都是intelliJ从tomcat安装目录的conf目录中拷贝过来的,每个项目会有一套。另外,还有catalina log, localhost log等。
   这里有一个有趣的现象,Unnamed_web_test,这是这个目录的名字,很明显,Unnamed是默认加上去的prefix,但是我始终没有在idea的图形界面中找到这个设置name的地方,应该是这部分对使用者没有任何修改的意义,所以就不提供界面修改了。但是怀着研究的兴趣,我还是在idea的配置文件中找到了修改的办法。在项目下的.idea/workspace.xml文件中指定了命名,只要修改这里就OK了。但是必须用外部编辑器修改,在idea中修改会被还原。
引用
<server-settings>
        <option name="BASE_DIRECTORY_NAME" value="Unnamed_web_test" />
      </server-settings>



   下一个环节,我要说一下我曾经遇到过的一个意外的事情。开始以为是IntelliJ的Bug,但是后来想通了,这是设计理念上和eclipse的不同造成。

   项目中所使用到的jar包,大多数都是需要部署进server的,但有少数jar包只需要编译期或者测试期使用,无需部署进tomcat,甚至有的会与tomcat内置jar起冲突。而在一般的IDE或者maven中,jar包都是可以设置scope的,如provide,test, compile等等,前两者就是属于不需要部署进server的类型。

   我的一个项目就遇到一个jar包编译期需要但是运行期绝对不能投进tomcat的情况。这本不是什么难事,如图,这里举例导入两个jar包,scope分别设置了provided和compile,(默认都是compile)。



   然后到下图界面,看右侧available elements Panel的列表中出现了一个jar,即scope为compile的,然后右键它选择第一项,移入/WEB-INF/lib。而provided得jar则无法选择,这说明了,provided不会被部署进运行目录(artifact)。这就是前面IntelliJ逻辑步骤中灰色字体的含义。



   但是!万万没想到,运行的时候,还是被加了进去!看了artifact目录下,还是出现了这个jar!这难道是IntelliJ的bug吗?百思不得其解。

   后来一次机会发现问题的根源在哪里,答案就是:在IntelliJ的设计理念中,lib目录根本不是放在开发目录的WEB-INF下!请参考前面逻辑步骤中蓝色字体的句子,“拷贝根目录下所有文件......”,而我发现这个问题的原因是,是有一次通过IntelliJ创建web项目时,发现lib目录默认放在了src同级下…… 确实很意外

   另外一个相关问题,之前一篇文章IntelliJ使用指南—— 导入Eclipse的Web项目中,谈到available elements部分时说:
引用
因为你会发现你即使不把jar包导入左边,运行时,lib下的所有jar包依然会拷贝到artifact目录下

   现在应该清楚了,因为lib目录在WebContent下,因此会一起带过去。所以如果你的项目lib在这之下的话,avaiable elements这部分操作就无需做了,错误提醒也可以无视。
  

   所以,以上就是IntelliJ IDEA在做web - tomcat开发的部署逻辑,以及IDE一些独有的特性。说实话,刚开始配的时候,觉得怎么这么难配,流程太复杂了,好像以前玩eclipse时候没怎么配就可以跑起来。但是现在清楚了配置和实现的关系以后,再回头看两者,就好像脱掉了衣服看到本质一样,其实是一模一样的,底下都需要符合jee的规范,上层么,只是一个界面而已。
  • 大小: 34.9 KB
  • 大小: 31.2 KB
  • 大小: 65.4 KB
  • 大小: 67.4 KB
分享到:
评论

相关推荐

    金碟云二次开发-新手入门指南:Java快速搭建开发_测试环境(测试工程_SDK)k3cloud-webapi-sdk

    本指南将帮助新手快速入门,通过Java语言搭建开发和测试环境,使用金碟云提供的WEB API k3cloud-webapi-sdk.jar进行高效集成。 首先,我们需要了解金碟云的基本概念。金碟云是金碟公司推出的一款基于云计算的企业...

    jsp毕业设计——jsp物流信息网建设(源代码+论文).zip

    这里使用JSP作为主要开发工具,意味着这个项目将深入探讨如何使用JSP来构建实际的Web应用。 【压缩包子文件的文件名称列表】 由于只给出了一个文件名"jsp物流信息网建设(源代码+论文)",我们可以推测这个文件可能是...

    java毕业设计之基于web的图书管理系统的设计与实现源码.zip

    "java环境及部署说明.zip"可能包含了更深入的部署指南,涵盖了从数据库设置到服务器配置的所有细节。而"yuanma"可能是项目源码的压缩文件,解压后可以看到系统的主要代码结构,包括但不限于前端界面、后端服务、数据...

    ofbiz--A Beginners Development Guide--Part 3

    总之,《OFBiz初学者开发指南——第三部分》将带领开发者深入探索OFBiz的组件加载机制、源码结构、开发工具、数据模型、服务、工作流和Web界面,为后续的OFBiz开发工作奠定坚实基础。在实践中不断学习和掌握这些知识...

    JSP开发web教学资源包 内含课件 开发工具和环境 实例和源代码

    本资源包是针对JSP进行Web开发的教学资料,包含了丰富的学习材料,有助于初学者和进阶者深入理解JSP技术。 **课件** 通常包含PPT、PDF等格式的文件,用于讲解JSP的基础概念、语法特性、生命周期、内置对象、指令...

    Java Web整合开发王者归来

    《Java Web整合开发王者归来》是一本专注于Java Web开发的权威指南,旨在帮助开发者全面掌握在Web环境中使用Java技术进行高效、稳定的应用程序构建。这本书的内容涵盖了从基础到高级的各种主题,适合不同层次的读者...

    roller安装

    《roller安装指南——深入探索源码与工具应用》 在IT行业中,经常需要处理各种开源项目,以便定制、学习或优化。"roller"是一个颇受欢迎的开源博客引擎,它为开发者提供了一个强大的平台来创建、管理和发布个人或...

    Java毕业设计——基于java的动力节点系统设计与实现(源码+数据库).zip

    综上所述,这个Java毕业设计项目涵盖了Java编程、Maven构建、数据库设计、Web应用开发等多个方面,对于深入理解Java Web应用的开发流程和技术栈有着重要的实践意义。通过研究这个项目,学习者可以提升自己的编程技能...

    java 旅游网站.zip

    通过学习和研究这个项目,开发者可以深入理解Java Web开发的基本流程,包括HTTP请求处理、数据库操作、前端与后端的交互等。此外,也可以了解到如何在实际项目中使用IDE进行调试和测试,以及如何管理和部署Web应用...

    java员工工资管理系统项目源码(源码+视频).zip

    通过学习这个项目,开发者不仅可以掌握Java Swing的界面设计,还能深入理解数据库设计、Java后端开发以及Web应用部署。同时,源码分析和视频教程的结合,为初学者提供了一个从理论到实践的完整学习路径,有助于提升...

    java web实训项目:基于SSM的学生成绩管理系统.zip

    通过本项目,开发者可以深入理解SSM框架的集成应用,掌握Java Web开发的基本流程,同时对数据库设计、前端页面交互有更直观的认识。项目中的README.md文件将提供更具体的运行和部署指南,帮助开发者快速上手。 总之...

    课设毕设基于SSM的大学生兼职平台LW+源码可运行.zip

    通过这个项目,学习者可以深入理解SSM框架的使用,掌握Web应用的开发流程,包括需求分析、系统设计、编码实现、测试调试以及部署上线等各个环节,同时也能提升数据库管理和项目管理的能力。对于初学者而言,这是一个...

    J2EE学习两本书

    本压缩包包含两本关于J2EE学习的重要书籍——"J2EE设计开发编程指南"和"深入掌握J2EE编程技术"。 首先,"J2EE设计开发编程指南"这本书可能涵盖了J2EE的基础概念、设计模式以及开发实践。它可能会详细介绍如何使用...

    java毕业设计之秋月堂茶座约茶平台的设计与实现源码.zip

    “java环境及部署说明.zip”文件可能包含了服务器环境的配置和项目部署的指南,可能包括Tomcat服务器的安装、项目的打包(如WAR文件)、以及将项目部署到服务器的具体步骤。这部分内容对理解项目的运行机制和上线...

    java毕业设计之篮球部落小程序的设计与实现源码.zip

    这些源代码是理解项目设计思想和实现细节的关键,通过对源码的学习,开发者可以深入理解MVC设计模式、Spring框架的应用、前端页面的构建(如HTML、CSS、JavaScript)、后端业务逻辑处理以及数据库交互等方面的知识。...

    景区票务系统的设计与实现源码&java毕业设计(完整前后端+数据库+说明文档+LW).zip

    最后,使用IDE如IntelliJ IDEA或Eclipse导入项目,运行主类启动服务器,前端访问可以通过内置的Tomcat服务器或者独立部署到其他Web服务器上。 总之,这个Java毕业设计项目是一个全面展示Web应用开发过程的实例,...

    a_simpleSSH.zip

    SSH框架是Web开发中常用的三大框架——Spring、Struts2和Hibernate的组合,它们各自负责应用程序的不同层面。这个"a_simpleSSH.zip"压缩包提供了一个简化的SSH框架示例,旨在帮助初学者快速入门并理解这些框架的基本...

    java毕业设计之校园失物招领微信小程序源码.zip

    通过此项目,开发者可以深入理解Java编程语言在实际项目中的应用,同时掌握微信小程序的开发流程。 项目环境是顺利运行此程序的基础。首先,该项目基于Java 1.8版本,这是一款广泛应用的面向对象编程语言,以其跨...

    科帮网javaWeb计算机配件报价系统项目源码.zip

    本篇文章将详细解析“科帮网javaWeb计算机配件报价系统项目源码”,旨在帮助Java初学者及进阶者深入理解Web应用的开发流程和技术要点。 首先,我们要了解的是项目的基础架构。JavaWeb项目通常基于MVC(Model-View-...

    JAVAWEB项目报告[归纳].pdf

    - **操作帮助**:提供清晰的用户指南和文档,以便用户理解和使用系统。 - **系统设计**:遵循MVC(Model-View-Controller)设计模式,将业务逻辑、数据处理和用户界面分离。 3. **数据库分析** 数据库设计是系统...

Global site tag (gtag.js) - Google Analytics