title |
---|
Library |
A library is an archive of compiled code (such as JAR files) that modules depend on.
The IntelliJ Platform supports three types of libraries:
- Module Library: the library classes are visible only in this module and the library information is recorded in the module
.iml
file. - Project Library: the library classes are visible within the project and the library information is recorded under
.idea/libraries
directory or in the project.ipr
file. - Global Library: the 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.
For more information about libraries, refer to Libraries.
A particular type of programmatically defined libraries is Predefined Libraries.
- bullet list {:toc}
Package libraries
provides functionality for working with project libraries and jars.
To get the list of libraries that a module depends on, use OrderEnumerator.forEachLibrary
as follows.
final List<String> libraryNames = new ArrayList<String>();
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.getInstance().getLibraryTable()
,
whereas the list of project-level library tables is accessed through LibraryTablesRegistrar.getInstance().getLibraryTable()
.
Once you have a LibraryTable
, you can get the libraries in it by calling LibraryTable.getLibraries()
.
To get the list of all module libraries defined in a given module, use the following API:
OrderEntryUtil.getModuleLibraries(ModuleRootManager.getInstance(module));
Library
provides the getUrls()
method you can use to get a list of source roots and classes the library includes.
To clarify, consider the following code snippet:
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)) {
strRoots.append(each).append("\n");
}
Messages.showInfoMessage(roots.toString(), "Library Info");
To create a library, perform the following steps:
- Get a write action
- Obtain the library table to which you want to add the library. 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()
.
For module-level libraries, you can also use simplified APIs in the ModuleRootModificationUtil
class to add a library with a single API call.
You can find an example of using these APIs in the project_model code sample.
To add or change the roots of a library, you need to perform the following steps:
- 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 you can use to check whether the specified file belongs to the project library classes or library sources.
You can use the following methods:
- 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 to see how the method mentioned above can be applied.
More details on libraries can be found in the plugin_model code sample.
EP: com.intellij.additionalLibraryRootsProvider
AdditionalLibraryRootsProvider
Allows providing synthetic/predefined libraries (SyntheticLibrary
) in a project without exposing them in the model. By default, they're also hidden from UI.