Project Model
This topic considers the concept of projects based on the IntelliJ Platform and related subjects, such as modules, libraries, facets, and SDKs.
Project
A project encapsulates all of a project's source code, libraries, and build instructions into a single organizational unit.
A project defines collections referred to as Modules and Libraries. Depending on the project's logical and functional requirements, a single-module or a multi-module project can be created.
Module
A module is a discrete unit of functionality that can be run, tested, and debugged independently. Modules include such things as source code, build scripts, unit tests, deployment descriptors, etc.
In a project, each module can use a specific Software Development Kit (SDK) or inherit the SDK defined at the project level. A module can depend on other modules of the project.
Library
A library is an archive of compiled code (such as JAR files) on which modules depend. The IntelliJ Platform supports three types of libraries: Module, Project, and Global Libraries.
SDK
Every project uses a Software Development Kit (SDK). For Java projects, SDK is referred to as JDK (Java Development Kit).
The SDK determines which API library is used to build the project. For a multi-module project, the project SDK is common for all modules within the project by default. Optionally, a project can configure an individual SDK for each module.
Facet
A facet represents a certain configuration, specific for a particular framework or technology associated with a module. A module can have multiple facets.
Configuration
The user can configure all entities listed above in the Project Structure dialog.
Use ProjectSettingsService
to open related entries programmatically.