Library
Product Help: Libraries
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.
The IntelliJ Platform supports three types of libraries:
The library classes are visible only in this module and the library information is recorded in the module .iml file.
The library classes are visible within the project and the library information is recorded under .idea/libraries directory or in the project .ipr file.
The library information is recorded in the applicationLibraries.xml file in $USER_HOME$
note
Workspace Model API (2024.2+)The 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.
List<String> libraryNames = new ArrayList<>();
ModuleRootManager.getInstance(module).orderEntries().forEachLibrary(library -> {
libraryNames.add(library.getName());
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.
To 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));
Library
provides the getUrls()
method to get a list of source roots and classes the library includes.
StringBuilder roots = new StringBuilder("The " + lib.getName() + " library includes:\n");
roots.append("Sources:\n");
for (String each : lib.getUrls(OrderRootType.SOURCES)) {
roots.append(each).append("\n");
}
roots.append("Classes:\n");
for (String each : lib.getUrls(OrderRootType.CLASSES)) {
roots.append(each).append("\n");
}
Messages.showInfoMessage(roots.toString(), "Library Info");
For 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 changesCommit 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 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.
AdditionalLibraryRootsProvider
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 UI.