打开"项目结构"对话框
单击“文件”->选择“项目结构…(Project structure)”
层级关系: Project(项目或工程)—Module(模块)—Package(包)—Class(类)
一个Project中可以创建多个Module,若无另外定义则一个工程为单模块,一般小项目都是一个模块
一个模块(Module)中可以创建多个包(Package)
一个包(Package)中可以创建多个类(Class)
- 项目(Project)
一个项目(Project)是一个整体的工作单元,通常由多个相关的模块组成,这些Module根据项目的需求和功能进行划分。例如,用户登录模块、用户角色模块和用户权限模块等,都是为了实现特定的功能而设计的。因为每个Module都可以独立地进行开发、测试和部署,同时也可以根据需要添加或删除Module,而不会影响到其他部分的稳定性。
项目可以包含多个模块、库和其他资源,以及必要的配置文件、文档等。
项目作为一个独立的实体,可以拥有自己的版本控制、构建工具和发布流程。
第一项,名称(Project name),项目名。
第二项,SDK(Project SDK)。配置项目的SDK使用,这项平时使用的比较多,比如新打开一个项目,要查看一下SDK版本是否与预期的一致。也可以在右边的Edit进行SDK的编辑。
此处点击编辑会跳到Platform Settings中的SDKs处进行操作。此处看一下图,操作比较简单,就不展开了。
不同的JDK版本选择,对代码的语法有一定的影响,比如选择JDK8以前的版本,那么代码中有基于Lambda的语法将会报错,也可以选择其他的版本。此处使用的是JDK17。
第三项,语言级别(Project language level)。选择要支持的Java语言级别。如果是多个Module(可以理解为一组项目)的话,对所有Module生效。
第四项,编译器输出(Project compiler output)。指定IntelliJ IDEA将存储编译结果的路径。
单个项目,可以在配置一个输出路径,同时也可以在后面提到的Module中进行独立配置。
但对于多个Module项目时,会出现大家共用一个output目录。
也可以根据个人喜好,另行设置
- 模块(Module)
模块(Module)则是项目的一个组成部分,用于实现特定的功能或提供某种服务。模块通常是项目内部的一个小单元,它可以包含一组相关的功能或一部分业务逻辑,每一个模块可以独立运行,相当于一个小项目。一个项目下的多个模块之间是兄弟关系,相互依赖关系。
第一项,加号可以导入、新增各类Module项目,当然后面的减号可以移除对应的项目。
第二项,项目名称,使用方式与前面的一致,也同样建议多处保持一致。
第三项,JDK版本,与Project中一样,但此处针对的是当前Module。
第四项,项目目录结构。对Module的开发目录进行文件夹分类,指定的文件夹类型。文件夹类型分了
**源代码(Sources)、测试(Test)、资源(Resources)、测试资源(Test Resources)、排除的(Excluded)。
(1)源代码文件夹主要用于存放Java文件。
在Java项目中,Sources目录下的.java文件会被编译成.class文件。这个目录是Java项目中最常见的,例如src目录,当项目被打包成jar文件时,Sources目录下的.java文件会被编译成.class文件,以便在运行时使用。
有时除了 src ,还有其他一些特别的目录也许也要作为可编译的目录,就需要把该目录设置成源代码文件夹。只有 Sources 这种可编译目录才可以新建 Java类和包。
(2)资源文件夹用于存放程序需要使用的资源文件,这些资源文件在打包成jar时,会直接被复制到jar包中,而不会被编译成.class文件。Resource目录适合存放一些不需要编译的静态资源,如配置文件、图片、文本等。这些资源在程序运行时直接被使用,而不需要经过编译过程。
(3)测试源代码(Tests)一般用于标注可编译的单元测试目录。
(4)测试资源(Test Resources)一般用于标注单元测试的资源文件目录。
(5)排除在外(Excluded)一般用于标注排除目录。被排除的目录不会被IntelliJIDEA创建索引,相当于被IntelliJIDEA废弃,该目录下的代码文件是不具备代码检查和智能提示等常规代码功能。
如上图所示,被标注的目录会在右侧有一个总的概括。其中classes虽然是Excluded目录,但是它有特殊性,可以不显示在这里。
此处使用比较多的场景是新增文件夹。右击一个顶层目录,弹出“New Folder”创建目录,随后可以对新增的文件夹进行类型指定。常见的情况比如创建的项目没有test或Test Resources,可在此处进行添加目录,然后指定目录类型。
已有文件夹,如下图,也可以选定后,单击右键选定"将目录标记为"(Mark Directory As)重新设定类型
与源(Sources)选项平级的还有路径(Paths)和依赖(Dependencies)。这两项操作都比较简单。
路径用来指定编译输出路径,如下图所示。
一般采用默认值即可。其中,继承项目编译输出路径,使用为项目指定的路径。即在Project选项中设置的out文件路径。使用模块编译输出路径,也可以给模块设置单独的输出路径。
下面的JavaDoc使用可用控件组合与模块关联的外部JavaDocs存储位置的列表。不常用,就不具体演示了。
另外一个是依赖(Dependencies),主要配置jar包依赖相关的内容。
这里同样可以配置JDK,还可以通过下面的加号引入其他依赖,同时还可以配置对应jar包所对应的Scope。
上面讲解了多处JDK配置的选项,如果在实战过程中出现JDK版本修改或不一致的问题,建议从头到尾查看一下各处JDK的版本是否有问题。
- 库(Library)
模块所依赖的已编译代码(例如 JAR 文件)的存档,简单来说,IDEA中的库(Libraries)就是用来存放外部jar包,我们的项目或模块需要某些jar包时,可以从这里把包导入到模块依赖(Dependencies)中。
另外:每个库或依赖其实可以包含多个jar包
IntelliJ 平台支持三种类型的库:
1、Moudle Library只在本模块中可见,信息记录在.iml文件中;
2、Project Library在项目中可见,信息记录在.ipr或.idea/libraries中;
3、Gloabl Library对不同项目可见
说明:Jar是Java Archive的缩写,它实际上是一个以“.jar”为扩展名的文件。在Java开发中,开发者常常将多个Java文件、类库、配置文件等打包成一个Jar文件,以便于分发、部署和版本管理。
- 模块特性(Facet)
IDEA里的Facet是一种用于为项目模块添加特定功能和配置的概念。它允许用户向项目模块添加额外的特性,Facet可以理解为一种插件或扩展,为特定类型的模块提供了额外的功能和配置选项。通过Facet,用户可以为模块启用特定的框架、技术或库,并为其提供相关的设置和工具支持。需要注意的是,Facet是与模块相关的概念,而不是整个项目级别的配置。每个模块可以独立地配置和管理自己的Facet,从而灵活地定制和扩展每个模块的功能,以适应不同类型的开发需求。
IDEA 中支持多种类型的 Facet,Java Facet、Web Facet、Android Facet、Database Facet及其他Facet,主要使用Web Facet
参照下图,设置Web facet
(1) 添加 Facet
要添加 Facet,我们可以右键单击项目,在弹出的菜单中选择 “Open Module Settings”(打开模块设置)。然后在打开的对话框中,点击左侧列表中的 “Facets”,再点击右侧的 “+” 图标添加所需的 Facet。
(2) 配置 Facet
添加完 Facet 后,我们可以在对话框的右侧面板中配置该 Facet 的各种设置。例如,对于 Java Facet,我们可以设置 JDK 版本、编译选项、依赖库等。对于其他类型的 Facet,也可以根据需要进行相应的配置。
(3) 应用和保存设置
完成配置后,记得点击对话框底部的 “Apply”(应用)按钮以应用所做的更改。然后点击 “OK”(确定) 按钮来保存设置并关闭对话框。这样,我们就成功地添加和配置了 Facet。
项目资源目录设为web
项目默认的资源目录是src
第一项 模块名称
第二项 web模块部署描述:对于Web应用程序,部署描述符必须被命名为“web.xml”,并且必须存放在Web应用程序根目录中的“WEB-INF”目录中。
是Servlet规范中定义的配置文件,用于配置Web应用程序的部署信息。在Tomcat中,Web.xml文件用于配置Servlet、Filter、Listener等组件的映射关系,配置Servlet的初始化参数、URL映射和访问权限等信息。但目前已不太使用web.xml,而是采用更简便的注解配置。
第三项 web资源目录
此处设置,当部署后,web文件夹下的资源直接部署到容器,即Tomcat根目录下,即访问资源的地址为
http://localhost:8080/
Facet表述了在Module中使用的各种各样的框架、技术和语言。这些Facets让Intellij IDEA知道怎么对待module内容,并保证与相应的框架和语言保持一致。
- 工件(Artifacts)
工件是项目构建过程中的一个重要概念,它代表了项目的输出结果。工件可以是Java归档(JAR)文件、Web应用程序(WAR)文件、企业应用程序(EAR)文件等多种形式,具体形式取决于项目的类型和构建配置。这些工件文件包含了项目编译后的代码、资源文件以及可能需要的依赖库,是项目部署和运行的基础。
对于Web应用程序,可以将工件部署到应用服务器或云平台上,例如,安装了Tomcat容器的服务器
默认情况下,构建时的工件将放置在out / artifacts / <artifact_dir>文件夹中。
第一项 工件的名称
第二项 工件的类型
主要介绍Web应用程序展开型和归档
Web应用程序归档(WAR)文件是一种将Web应用程序打包成单一文件的形式,便于分发和部署。这种文件包含了应用程序的所有文件和资源,包括JSP、Servlet、图片、CSS、JavaScript等,以及应用程序的元数据和配置信息。WAR文件是Java EE Web应用程序的标准打包方式,被Java EE Web应用程序服务器广泛支持。它允许开发者将应用程序的所有依赖项和资源打包到一个文件中,从而简化部署过程。
Web应用程序展开型则是指将WAR文件解压后的状态,即应用程序的所有文件和资源被解压缩到目标服务器上的过程。这种形式更适合于直接在服务器上运行应用程序,因为它提供了对文件和资源的直接访问,而无需先进行解压。展开型应用程序通常用于生产环境,其中性能和效率是关键因素。
归档形式便于分发和部署,而展开型则更适合直接在生产环境中运行,提供最佳的性能和效率
第三项
勾选包含在项目构建中,当构建(Build)–> 构建项目(Make Project)时,会自动构建工件。
输出目录,当执行构建(build)–>构建工件 (Build Artifacts)时,artifacts将被放到这个指定的目录下
如上图所示,构建工件(Build | Build Artifacts)时,有以下选项:
(1)构建, 第一次使用时,会构建整个工件。每次下次使用此选项时,只会构建受上次构建后所做更改影响的工件部分,并将其添加到输出文件夹中
(2)重新构建, 像第一次一样构建整个工件。从技术上讲,这是Clean,然后是Build
(3)清理, 删除工件输出目录的所有内容
(4)编辑… , 打开项目结构对话框,编辑工件配置
- 软件开发工具包(SDK)
全称Software Development Kit,是一组用于开发特定软件、框架、硬件平台或操作系统的工具集合。工程师为辅助开发某类软件的相关文档、范例和工具的集合,使用SDK可以提高开发效率,更简单的接入某个功能。对于Java项目,SDK简称为JDK(Java Development Kit)。如果一个项目是多模块的,则默认情况下项目内的所有模块都使用项目 SDK。或者,项目可以为每个模块配置单独的 SDK。
常见问题:
1.为何是SDK版本而不是JDK版本?
答:因为IntelliJ IDEA是JVM平台IDEA,不仅仅支持Java还有其它语言如Kotlin,所以写成SDK更抽象;
2.为何指定了SDK还要指定语言等级?
答:因为SDK版本并不直接决定语言等级。如你用的JDK 11,但依旧可以把语言等级调为8来进行编译/运行。这是集成开发环境的优势所在,轻松对多环境进行定制化支持
3.为什么要引入外部jar包?
答:便利快捷,提高开发速度。jar包就是一套由他人已经写好,然后进行打包后的类、方法等,如果java类库自带的方法是满足不了开发,可以将jar包引入到项目中,然后就可以直接使用这些jar包中提供的工具(比如类和属性以及方法等)。