A library is an archive of compiled code (such as JAR files) that modules depend on.
A particular type of programmatically defined libraries is Predefined Libraries.
Library TypesThe IntelliJ Platform supports three types of libraries:
Module LibraryThe library classes are visible only in this module, and the library information is recorded in the module .iml file.
Project LibraryThe library classes are visible within the project, and the library information is recorded under the .idea/libraries directory or in the project .ipr file.
Global LibraryThe library information is recorded in the applicationLibraries.xml file in $USER_HOME$/.IntelliJIdea/config/options directory. Global libraries are similar to project libraries but are visible for different projects.
Working with LibrariesThe Workspace Model API is available since 2024.2 for use by third-party plugins and should be preferred over using the Project Model API.
See Interoperability with Project Model API and Usage Examples.
Package com.intellij.openapi.roots.libraries
provides functionality for working with project libraries and JAR files.
To get the list of libraries that a module depends on, use OrderEnumerator.forEachLibrary
as follows.
val libraryNames = mutableListOf<String>() ModuleRootManager.getInstance(module).orderEntries() .forEachLibrary { libraryNames.addIfNotNull(it.name) true } Messages.showInfoMessage( libraryNames.joinToString("\n"), "Libraries in Module" )
List<String> libraryNames = new ArrayList<>(); ModuleRootManager.getInstance(module).orderEntries() .forEachLibrary(library -> { String libraryName = library.getName(); if (libraryName != null) { libraryNames.add(libraryName); } return true; }); Messages.showInfoMessage( StringUtil.join(libraryNames, "\n"), "Libraries in Module" );
This sample code outputs a list of libraries that the given module depends on.
Getting a List of All LibrariesTo manage the lists of application and project libraries, use LibraryTable
. The list of application-level library tables is accessed by calling LibraryTablesRegistrar.getLibraryTable()
, whereas the list of project-level library tables is accessed via LibraryTablesRegistrar.getLibraryTable(Project)
. Get the list of libraries in it via LibraryTable.getLibraries()
.
To get the list of all module libraries defined in a given module, use API from OrderEntryUtil
:
OrderEntryUtil.getModuleLibraries(ModuleRootManager.getInstance(module))
Getting the Library ContentLibrary
provides the getUrls()
method to get a list of source roots and classes the library includes.
val roots = StringBuilder() roots.appendLine("The ${lib.name} library includes:") roots.appendLine("Sources:") for (sourcesUrl in lib.getUrls(OrderRootType.SOURCES)) { roots.appendLine(sourcesUrl) } roots.appendLine("Classes:") for (classesUrl in lib.getUrls(OrderRootType.CLASSES)) { roots.appendLine(classesUrl) } Messages.showInfoMessage(roots.toString(), "Library Info")
StringBuilder roots = new StringBuilder(); roots.append("The " + lib.getName() + " library includes:\n"); roots.append("Sources:\n"); for (String sourcesUrl : lib.getUrls(OrderRootType.SOURCES)) { roots.append(sourcesUrl).append("\n"); } roots.append("Classes:\n"); for (String classesUrl : lib.getUrls(OrderRootType.CLASSES)) { roots.append(classesUrl).append("\n"); } Messages.showInfoMessage(roots.toString(), "Library Info");
Creating a LibraryFor module-level libraries, use the simplified APIs from ModuleRootModificationUtil
to add a library with a single API call. An example of using these APIs can be found in the project_model code sample.
Get a write action.
Get the library table add the library to. Use one of the following, depending on the library level:
LibraryTablesRegistrar.getInstance().getLibraryTable()
LibraryTablesRegistrar.getInstance().getLibraryTable(Project)
ModuleRootManager.getInstance(module).getModifiableModel().getModuleLibraryTable()
Create the library by calling LibraryTable.createLibrary()
.
Add contents to the library (see below).
For a module-level library, commit the modifiable model returned by ModuleRootManager.getInstance(module).getModifiableModel()
.
Get a write action.
Get a modifiable model for the library, using Library.getModifiableModel()
.
Use methods such as Library.ModifiableModel.addRoot()
to perform the necessary changes.
Commit the model using Library.ModifiableModel.commit()
.
Use ModuleRootModificationUtil.addDependency(Module, Library)
from under a write action.
The ProjectFileIndex
interface implements a number of methods that can be used to check whether the specified file belongs to the project library classes or library sources.
To check if a specified virtual file is a compiled class file use
ProjectFileIndex.isLibraryClassFile(virtualFile)
To check if a specified virtual file or directory belongs to library classes use
ProjectFileIndex.isInLibraryClasses(virtualFileorDirectory)
To check if the specified virtual file or directory belongs to library sources use
ProjectFileIndex.isInLibrarySource(virtualFileorDirectory)
See the project_model sample plugin to see how the method mentioned above can be applied.
More details on libraries can be found in the plugin_model code sample.
Predefined LibrariesAdditionalLibraryRootsProvider
registered in com.intellij.additionalLibraryRootsProvider
extension point allows providing synthetic/predefined libraries (SyntheticLibrary
) in a project without exposing them in the model. By default, they're also hidden from the UI.
18 June 2025
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4