IntelliJ IDEA学习记录

IntelliJ IDEA学习记录 - Facets 与 Artifacts

一、概念

1、Facets

Facets 表述了在 Module 中使用的各种各样的框架、技术和语言。表述了 Module 有什么特征,比如 Web,Spring 和 Hibernate 等;

这些 Facets 让 Intellij IDEA 知道怎么对待 module 内容,并保证与相应的框架和语言保持一致。

使用 Facets 能让我们下载并配置 framework 所必须的组件,会自动生成各种各样的描述符,并存储在适当的位置,等等。

大多数 Facets 可以无冲突得添加到 Module 中,也有一些 Facets 是继承其他 Facets 的,这些 Facets 的添加就必须先添加他们的父 Facets ,这些 Facets 也要依赖 Intellij IDEA 的相关插件是否开启。

作用:它的作用就是配置项目框架类支持。

2、Artifacts

artifact 是一个项目资源的组合体。例如,一个已编译的java类的集合,一个已打包的java应用。

artifact 可以是一个 archive 文件,也可以是一个包含以下结构元素的目录结构:

-- (一个或多个)module的编译Output;

-- 包含在module的依赖中的Libraries;

-- 资源的集合,如web页面,图片,decriptor文件;

-- 其他artifacts;

-- 个别文件、目录和archives;

作用:

整合编译后的 java 文件,资源文件等,有不同的整合方式,比如war、jar、war exploded 等。

对于 Module 而言,有了 Artifact 就可以部署到 web 容器中了。

其中 war 和 war exploded 区别就是后者不压缩,开发时选后者便于看到修改文件后的效果。

特别说明:

Artifact 是 maven 中的一个概念,表示某个 module 要如何打包,例如 war exploded、war、jar、ear 等等这种打包形式;

一个 module 有了 Artifacts 就可以部署到应用服务器中了!

二、output 目录

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 下,之后项目就可以启动了。

参考资料

IntelliJ Idea中的 Facets 与 Artifacts

原文地址:https://www.cnblogs.com/wangwangfei/p/13700727.html