当前位置: 首页 > news >正文

IntelliJ Idea中的 Facets 与 Artifacts

在公司和家用电脑上不同版本的idea做实验发现过程中会有些不同,遇到过一些问题,也正是这些问题使得自己能更进一步了解项目构建过程中的细节,特别记录一下。
 
这个是【温故知新】 Java web 开发系列编写过程中发现的。总结性要点在最后边,中间过程不想看可跳过。
 
首先是 Modules,如下图所示,最开始生成的 Module 里的 jdwork,并没有把我们新生成的 webapp以及子目录放入里边,这样子的话项目在部署和启动的时候是找不到web.xml这个文件的。与此对应的是,项目目录结构中webapp没有任何标记,跟一般文件夹没区别。
    
 
这里需要我们手动添加,解决方法如下:
 
 
 
注意修改这两个路径为项目中的真实路径,默认路径可能不对。
 
 
修改过之后再看项目目录,就有变化了,如图,虽然我还不是特别清楚这个有啥用。
 
 
 
好了解决了这个问题,该讨论下一些原理性的东西了。
 
这里涉及到 IntelliJ Idea 的一个概念,Facet。如果注意观察的话,应该发现了,它就在 Project Structure 栏目里 Project、Modules、Libraries下面那一个,它的作用就是配置项目框架类支持。
 
比如我们现在要开发的是一个 web 项目,那就需要 web 相关的 Facet,事实上,如果没有这个配置支持,编译器也不知道这个项目是个 web 项目,也就不会去读取 web.xml 的配置,更无法被 tomcat 这种容器支持。
 
Facet 是和 Module 紧密结合的,你如果是在 Module 里配置了,那么 Facet 里边也会出现,而如果你先在 Facet 里配置,它会要求你选择 Module,所以结果是一致的。
 
再就是解释下 Artifacts,它的作用是整合编译后的 java 文件,资源文件等,有不同的整合方式,比如war、jar、war exploded 等,对于 Module 而言,有了 Artifact 就可以部署到 web 容器中了。其中 war 和 war exploded 区别就是后者不压缩,开发时选后者便于看到修改文件后的效果。
 
谈到 Artifacts,就得说一下几个输出目录的问题,Project 选项里有一个 Project compilerc output 目录,这个是整个 Project 的编译输出目录;Modules 的具体单个 Module 的 Path 选项里有个 Compiler output,可以选择继承 Project 或者自定义输出目录,如下图所示:
 
 
 
然后就是 Artifacts 也有一个 Output Directory,这几个的关系是怎样的呢?
 
 
 
前两者的关系好理解,就是一个总体和个体配置的关系。而 Artifacts 里的输出目录是跟容器有关系的,在容器运行的时候,会把前两者中起作用的那个(个体配置优先)的 classes 文件复制到 Artifacts 配置的目录的 WEB-INF下边,然后把 Module 的 Facet 里的资源文件目录复制到 Artifacts 目录里,再就是复制 lib 下的 jar 包到 WEB-INF 下,之后项目就可以启动了。
 

转载于:https://www.cnblogs.com/bityinjd/p/9284378.html

相关文章:

  • 面向对象之-@classmethod、@staticmethod和@classonlymethod的区别
  • 第05章-构建Spring Web应用程序
  • c#语法
  • 做好架构师,要懂微服务,汇总微服务架构落地的15种框架
  • SVG的学习(34—36)
  • javaSE --集合框架
  • Java - 常用工具类 - 字符串
  • 中控考勤机管理员密码清除
  • Unity3D_(游戏)2D简单游戏制作过程:捕获高空掉落保龄球
  • Jsp运行原理
  • 苹果mac版微软官方远程连接工具下载Microsoft Remote Desktop For Mac
  • Day 2:线程与进程系列问题(二)
  • 静态方法和类方法
  • 在Asp.Net Core中使用中间件保护非公开文件
  • less、sass、stylus
  • [PHP内核探索]PHP中的哈希表
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 10个确保微服务与容器安全的最佳实践
  • Android Studio:GIT提交项目到远程仓库
  • learning koa2.x
  • mysql外键的使用
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • node和express搭建代理服务器(源码)
  • Node项目之评分系统(二)- 数据库设计
  • PHP 的 SAPI 是个什么东西
  • php中curl和soap方式请求服务超时问题
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • select2 取值 遍历 设置默认值
  • ucore操作系统实验笔记 - 重新理解中断
  • 程序员最讨厌的9句话,你可有补充?
  • 从tcpdump抓包看TCP/IP协议
  • 翻译:Hystrix - How To Use
  • 深度解析利用ES6进行Promise封装总结
  • 原生Ajax
  • 智能合约Solidity教程-事件和日志(一)
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (ibm)Java 语言的 XPath API
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (南京观海微电子)——COF介绍
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (未解决)macOS matplotlib 中文是方框
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)虚函数剖析
  • .Net CF下精确的计时器
  • .Net MVC + EF搭建学生管理系统
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET6 命令行启动及发布单个Exe文件
  • .Net下的签名与混淆