IntelliJ IDEA 学习笔记 - 项目相关的几个重要概念介绍
本文简单介绍IntelliJ IDEA里项目相关的几个重要概念,参考IntelliJ IDEA 简体中文专题教程,英文好的同学可以查看英文官网文档
Project 和 Module 介绍
-
Project
和Module
这两个概念是 IntelliJ IDEA 的必懂知识点之一 - 在 IntelliJ IDEA 中
Project
是最顶级的级别,次级别是Module
。一个Project
可以有多个Module
。目前主流的大型项目结构都是类似这种多Module
结构,这类项目一般是这样划分的,比如:core Module
、web Module
、plugin Module
、solr Module
等等,模块之间彼此可以相互依赖。通过这些Module
的命名也可以看出,他们之间应该都是处于同一个项目业务情况下的模块,彼此之间是有不可分割的业务关系的 - 一个
Project
是由一个或多个Module
组成,模块之间尽量是处在同一个项目业务的的情况下,彼此之间互相依赖关联。这里用的是 尽量,因为 IntelliJ IDEA 的 Project 是一个没有具备任何编码设置、构建等开发功能的,主要起到一个项目定义、范围约束、规范等类型的效果,也许我们可以简单地理解为就是一个单纯的目录,只是这个目录命名上必须有其代表性的意义 - 以
spring-framework
项目为例理解多 Module 的结构- 项目主页:https://github.com/spring-projects/spring-framework
- 该项目的
Project
命名是:spring-framework
。该目录主要作用为各个Module
的顶层目录进行约束,告诉协同者,这个目录下都是spring-framework
相关的,我绝不会放 Android 相关源码、文档、文件在上面的。该目录并不是以一个实际性的目录来体现的,所以你访问主页是看不到的,但是当你 checkout 的时候,你必须为这个项目命名,至于命名默认就是spring-framework
- 该
Project
下有二十来个Module
,各个Module
的命名也是有含义的,比如:spring-core
、spring-jdbc
、spring-jms
、spring-orm
、spring-web
、spring-webmvc
等等,我们通过这些命名也能清楚地知道他们要表达的含义,这些Module
下也都各自有 src 编码目录,可以自行编码和构建
- 相比较于多
Module
项目,小项目就无需搞得这么复杂。只有一个Module
的结构 IntelliJ IDEA 也是支持的,并且 IntelliJ IDEA 创建项目的时候,默认就是单Module
的结构的
SDK介绍
按Ctrl + Shift + Alt + S
弹出项目结构设置区,如下
IntelliJ IDEA 支持 6 种 SDK。最常用的就是 JDK 和 Android SDK,其中在创建 Android SDK 的时候如果你没有先配置一个 JDK 的话,IntelliJ IDEA 则会提示你要先配置一个 JDK,然后才能配置 Android SDK,点击上图界面中的New...
按钮后便可以进行新增SDK的操作,如下
由于 IntelliJ IDEA 支持管理多个 JDK,下拉会展示已经创建的所有 SDK,可以很方便地不同 SDK 中切换。所以在开发 Java 项目过程中,完全不用担心系统上不同项目需要不同 JDK的问题,如下
按Ctrl + Shift + Alt + S
弹出项目结构设置区,选择Platform Settings -> SDKs
如下
-
SDKs
为 SDK 的统一管理处,注意不只是针对当前项目 - 加号
+
可以添加新 SDK;减号-
可以删除光标所选的 SDK
language level 介绍
language level:限定项目编译检查时最低要求的 JDK 特性
language level
应该算是 IntelliJ IDEA 特有的,介绍了一些 Java JDK 在每个新版本里的新特性,而新版本一般也会向下兼容旧版本的特性,IntelliJ IDEA 是对这些 JDK 的新特性是这样介绍的
- 当我们使用 JDK 8 的时候,我们只能向下兼容 JDK 8 及其以下的特性,所以只能选择 8 及其以下的
language level
。所以当我们项目使用的是 JDK 8,但是代码却没有使用 JDK 8 的新特性,最多使用了 JDK 7 的特性的时候我们可以选择7 - Diamonds,ARM,multi-catch etc.
。 - 假设我们有一个项目代码使用的 JDK 8 新特性:lambda 语法,但是 JDK 选择的却是 JDK 7,即使 language level 选择了
8 - Lambdas,type annotation etc.
,也是没有多大意义的,一样会编译报错
Module 下的 SDK 和 language level
对于大型项目,各个 Module
用到的 SDK
和 language level
很有可能是各不一样的,IntelliJ IDEA 对此也进行了支持 ,如下