mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-29 17:57:53 +08:00
407 lines
40 KiB
HTML
407 lines
40 KiB
HTML
|
||
|
||
|
||
<!doctype html>
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<title>Project Structure / IntelliJ Platform SDK DevGuide</title>
|
||
<link rel="stylesheet" href="/intellij/sdk/docs/app/css/styles.min.css">
|
||
|
||
<!-- non-retina iPad pre iOS 7 -->
|
||
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-72x72.png" sizes="72x72">
|
||
|
||
<!-- retina iPhone pre iOS 7 -->
|
||
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-114x114.png" sizes="114x114">
|
||
|
||
<!-- retina iPad pre iOS 7 -->
|
||
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-144x144.png" sizes="144x144">
|
||
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/intellij/sdk/docs/apple-touch-icon-precomposed.png">
|
||
|
||
<!-- normal favicon -->
|
||
<link rel="shortcut icon" type="image/x-icon" href="/intellij/sdk/docs/favicon.ico">
|
||
<link rel="icon" type="image/png" href="/intellij/sdk/docs/favicon.png">
|
||
<link rel="stylesheet" href="/intellij/sdk/docs/styles/styles.css"></head>
|
||
<body data-id="basics/project_structure">
|
||
<div class="wrapper">
|
||
<section class="panel _nav">
|
||
<header class="panel__header">
|
||
<div class="container">
|
||
<form class="search-box">
|
||
<label for="search-box__input" class="search-box__label">
|
||
<input type="text" class="search-box__input" id="search-box__input" placeholder="Search IntelliJ Platform SDK DevGuide">
|
||
</label>
|
||
<div class="search-box__clear" title="Clear"></div>
|
||
</form>
|
||
</div>
|
||
</header>
|
||
<nav class="panel__content">
|
||
<div class="container _nav">
|
||
<menu class="nav-tree"></menu>
|
||
</div>
|
||
<div class="container _footer panel__footer">
|
||
<p><a href="https://youtrack.jetbrains.com/issues/IJSDK">Send feedback</a></p>
|
||
<p>© 2000–2016 <a href="//www.jetbrains.com">JetBrains</a> s.r.o.<br>
|
||
All rights reserved.</p>
|
||
</div>
|
||
</nav>
|
||
</section>
|
||
|
||
<main class="panel _main" role="main">
|
||
<header class="panel__header">
|
||
<div class="container">
|
||
<h3>IntelliJ Platform SDK DevGuide</h3>
|
||
|
||
<div class="shortcuts-switcher"><label for="switch-shortcuts">Keymap:</label><select id="switch-shortcuts" class="select _shortcuts" height="1">
|
||
<option data-group="primary" value="default" selected>Default</option>
|
||
<option data-group="primary" value="default_for_gnome">GNOME</option>
|
||
<option data-group="primary" value="default_for_kde">KDE</option>
|
||
<option data-group="primary" value="default_for_xwin">XWindow</option>
|
||
<option data-group="primary" value="emacs">Emacs</option>
|
||
<option data-group="primary" value="jbuilder">JBuilder</option>
|
||
<option data-group="primary" value="visual_studio">Visual Studio</option>
|
||
<option data-group="primary" value="netbeans_6.5">NetBeans 6.5</option>
|
||
<option data-group="primary" value="eclipse">Eclipse</option>
|
||
<option data-group="secondary" value="mac_os_x_10.5_">OS X 10.5+</option>
|
||
<option data-group="secondary" value="mac_os_x">OS X</option>
|
||
<option data-group="secondary" value="eclipse_mac_os_x">OS X Eclipse</option></select>
|
||
</div>
|
||
|
||
<div class="panel-trigger"></div>
|
||
</div>
|
||
</header>
|
||
<section class="panel__content">
|
||
<div class="container">
|
||
<article class="article" data-shortcut-switcher="false">
|
||
|
||
<h1>Project Structure</h1>
|
||
<!--TODO split into parts accordingly to the table of contents-->
|
||
|
||
<p>This topic considers the concept of projects based on <em>IntelliJ Platform</em> and related subjects, such as <em>modules</em>, <em>facets</em>, <em>libraries</em>, <em>SDK</em>. The project structure and Java classes you can use to manage projects and modules have been considered.</p>
|
||
|
||
<a name="project-and-its-components" class="elem-anchor"></a>
|
||
<h2>Project and its components<a href="#project-and-its-components" class="anchor-link"><span></span></a></h2>
|
||
|
||
<p>This section briefly discusses the IDEA project structure, project components and related terms. For more information about projects and their components, refer to <a href="http://www.jetbrains.com/idea/help/project.html" data-bypass="yes" target="_blank"><span>Project</span></a>, <a href="http://www.jetbrains.com/idea/help/module.html" data-bypass="yes" target="_blank"><span>Module</span></a>, <a href="http://www.jetbrains.com/idea/help/library.html" data-bypass="yes" target="_blank"><span>Library</span></a>, <a href="http://www.jetbrains.com/idea/help/facet.html" data-bypass="yes" target="_blank"><span>Facet</span></a> in the <em>IntelliJ IDEA</em> Web Help.</p>
|
||
|
||
<a name="project" class="elem-anchor"></a>
|
||
<h3>Project<a href="#project" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>In the <em>IntelliJ Platform</em>, a <em>project</em> encapsulates all your source code, libraries, and build instructions into a single organizational unit. Everything you do using the <em>IntelliJ Platform SDK</em> is done within the context of a project. A project defines collections referred to as <em>modules</em> and <em>libraries</em>. Depending on the logical and functional requirements to the project, you can create a <em>single-module</em> or a <em>multi-module</em> project.</p>
|
||
|
||
<a name="module" class="elem-anchor"></a>
|
||
<h3>Module<a href="#module" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>A <em>module</em> is a discrete unit of functionality that can be run, tested, and debugged independently. Modules includes such things as source code, build scripts, unit tests, deployment descriptors, etc. In the project, each module can use a specific SDK or inherit SDK defined on the project level (see the <a href="/intellij/sdk/docs/reference_guide/project_model/sdk.html"><span>SDK</span></a> section later in this document). A module can depend on other modules of the project.</p>
|
||
|
||
<a name="library" class="elem-anchor"></a>
|
||
<h3>Library<a href="#library" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>A <em>library</em> is an archive of compiled code (such as JAR files) that your modules depend on. The <em>IntelliJ Platform</em> supports three types of libraries:</p>
|
||
|
||
<ul>
|
||
<li><strong>Module Library</strong>: the library classes are visible only in this module and the library information is recorded in the module <code class="code highlight language-text">.iml</code> file.</li>
|
||
<li><strong>Project Library</strong>: the library classes are visible within the project and the library information is recorded in the project <code class="code highlight language-text">.ipr</code> file or in <code class="code highlight language-text">.idea/libraries</code>.</li>
|
||
<li><strong>Global Library</strong>: the library information is recorded in the <code class="code highlight language-text">applicationLibraries.xml</code> file into the <code class="code highlight language-text">~/.IntelliJIdea/config/options</code> directory. Global libraries are similar to project libraries, but are visible for the different projects.</li>
|
||
</ul>
|
||
|
||
<p>For more information about libraries, refer to <a href="http://www.jetbrains.com/idea/help/library.html" data-bypass="yes" target="_blank"><span>Library</span></a>.</p>
|
||
|
||
<a name="sdk" class="elem-anchor"></a>
|
||
<h3>SDK<a href="#sdk" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>Every project uses a Software Development Kit (<em>SDK</em>). For Java projects, SDK is referred to as JDK (Java Development Kit).</p>
|
||
|
||
<p>The SDK determines which API library is used to build the project. If your project is multi-module, the project SDK by default is common for all modules within the project.</p>
|
||
|
||
<p>Optionally, you can configure individual SDK for each module.</p>
|
||
|
||
<p>For more information about SDKs, see <a href="https://www.jetbrains.com/idea/help/configuring-global-project-and-module-sdks.html" data-bypass="yes" target="_blank"><span>Configuring Global, Project and Module SDKs</span></a> in the <em>IntelliJ IDEA</em> Web Help.</p>
|
||
|
||
<a name="facet" class="elem-anchor"></a>
|
||
<h3>Facet<a href="#facet" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>A <em>facet</em> represents certain configuration, specific for a particular framework/technology, associated with a module. A module can have multiple facets. E.g. Spring specific configuration is stored in a Spring facet.</p>
|
||
|
||
<p>For more information about facets see <a href="http://www.jetbrains.com/idea/help/facet.html" data-bypass="yes" target="_blank"><span>Facet</span></a> and <a href="http://www.jetbrains.com/idea/help/available-facets-and-their-dependencies.html" data-bypass="yes" target="_blank"><span>Facet Dependencies</span></a> in the <em>IntelliJ IDEA</em> Web Help.</p>
|
||
|
||
<a name="project-structure" class="elem-anchor"></a>
|
||
<h2>Project Structure<a href="#project-structure" class="anchor-link"><span></span></a></h2>
|
||
|
||
<p>From the plugin developer’s point of view, a project can be thought of as follows:</p>
|
||
|
||
<p><img src="project_structure/img/IntelliJIDEA_ProjectStructure.png" alt="Project Structure" /></p>
|
||
|
||
<p>A <strong>project</strong> consists of one or several <strong>modules</strong>. Each <strong>module</strong> includes the plugin source code and so called <strong>order entries</strong> that refer to <strong>SDK</strong> and <strong>libraries</strong> the module uses. By default, all modules uses the project SDK. In addition, a <strong>module</strong> can optionally have a set of <strong>facets</strong>.</p>
|
||
|
||
<p>This document explains how you can explore and change the structure of projects using API.</p>
|
||
|
||
<a name="working-with-projects" class="elem-anchor"></a>
|
||
<h2>Working with Projects<a href="#working-with-projects" class="anchor-link"><span></span></a></h2>
|
||
|
||
<p>This section explains how to complete some common tasks related to management of projects.
|
||
The Java classes and interfaces that you can use to explore and change the project contents are discussed.</p>
|
||
|
||
<a name="how-to-work-with-project-files" class="elem-anchor"></a>
|
||
<h3>How to Work with Project Files?<a href="#how-to-work-with-project-files" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>The <em>IntelliJ Platform</em> stores the project configuration data in XML files. The list of those files depends on the plugin <a href="http://www.jetbrains.com/idea/help/project.html" data-bypass="yes" target="_blank"><span>project format</span></a>.</p>
|
||
|
||
<p>For <em>file-based</em> format projects, the information core to the project itself (e.g. location of the component modules, compiler settings, etc.) is stored in the <code class="code highlight language-text">%project_name%.ipr</code> file.</p>
|
||
|
||
<p>The information about modules the project includes is stored in <code class="code highlight language-text">%module_name%.iml</code> files. Module files are created for each module.</p>
|
||
|
||
<p>For <em>directory-based</em> format projects, the project and workspace settings are stored in a number of XML files under the <code class="code highlight language-text">%project_home_directory%/.idea</code> directory. Each XML file is responsible for its own set of settings and can be recognized by its name: <code class="code highlight language-text">projectCodeStyle.xml</code>, <code class="code highlight language-text">encodings.xml</code>, <code class="code highlight language-text">vcs.xml</code> etc.</p>
|
||
|
||
<p>As for the file-based format projects, <code class="code highlight language-text">.iml</code> files describe modules.</p>
|
||
|
||
<p>To work with projects and project files, you can use the following classes and interfaces:</p>
|
||
|
||
<ul>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/core-api/src/com/intellij/openapi/project/Project.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">Project</code></span></a> interface.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/roots/ProjectRootManager.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ProjectRootManager</code></span></a> abstract class.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/project/ProjectManager.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ProjectManager</code></span></a> abstract class.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/roots/ProjectFileIndex.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ProjectFileIndex</code></span></a> interface.</li>
|
||
</ul>
|
||
|
||
<p>Note that you don’t need to access project files directly to load or save settings. See <a href="persisting_state_of_components.html"><span>Persisting State of Components</span></a> for more information.</p>
|
||
|
||
<p>Note that hereafter, the <code class="code highlight language-text">project</code> variable is of the <code class="code highlight language-text">Project</code> type. For example, for the opened project, you can get it from an action: <code class="code highlight language-text">Project project = e.getProject();</code></p>
|
||
|
||
<a name="how-do-i-get-a-list-of-source-roots-for-all-modules-in-my-project" class="elem-anchor"></a>
|
||
<h3>How do I get a list of source roots for all modules in my project?<a href="#how-do-i-get-a-list-of-source-roots-for-all-modules-in-my-project" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>Use the <code class="code highlight language-text">ProjectRootManager.getContentSourceRoots()</code> method. To clarify this, consider the following code snippet:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">String</span> <span class="n">projectName</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
|
||
<span class="n">StringBuilder</span> <span class="n">sourceRootsList</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="o">();</span>
|
||
<span class="n">VirtualFile</span><span class="o">[]</span> <span class="n">vFiles</span> <span class="o">=</span> <span class="n">ProjectRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">project</span><span class="o">).</span><span class="na">getContentSourceRoots</span><span class="o">();</span>
|
||
<span class="k">for</span> <span class="o">(</span><span class="n">VirtualFile</span> <span class="n">file</span> <span class="o">:</span> <span class="n">vFiles</span><span class="o">)</span> <span class="o">{</span>
|
||
<span class="n">sourceRootsList</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">file</span><span class="o">.</span><span class="na">getUrl</span><span class="o">()).</span><span class="na">append</span><span class="o">(</span><span class="s">"\n"</span><span class="o">);</span>
|
||
<span class="o">}</span>
|
||
|
||
<span class="n">Messages</span><span class="o">.</span><span class="na">showInfoMessage</span><span class="o">(</span><span class="s">"Source roots for the "</span> <span class="o">+</span> <span class="n">projectName</span> <span class="o">+</span> <span class="s">" plugin:\n"</span> <span class="o">+</span> <span class="n">sourceRootsList</span><span class="o">,</span> <span class="s">"Project Properties"</span><span class="o">);</span>
|
||
</code></pre>
|
||
|
||
<a name="how-do-i-check-whether-a-file-is-related-to-a-project" class="elem-anchor"></a>
|
||
<h3>How do I check whether a file is related to a project?<a href="#how-do-i-check-whether-a-file-is-related-to-a-project" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>The <em>IntelliJ Platform</em> provides the <code class="code highlight language-text">ProjectFileIndex</code> interface you can use to verify whether a file or directory is related to the specified IDEA project. This section explains how you can use this interface.</p>
|
||
|
||
<a name="how-do-i-get-an-instance-of-the-projectfileindex-interface" class="elem-anchor"></a>
|
||
<h4>How do I get an instance of the ProjectFileIndex interface?</h4>
|
||
|
||
<p>Use the <code class="code highlight language-text">ProjectRootManager.getFileIndex()</code> method. For example:
|
||
<code class="code highlight language-text">ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();</code></p>
|
||
|
||
<a name="how-do-i-get-a-module-to-which-a-file-belongs" class="elem-anchor"></a>
|
||
<h4>How do I get a module to which a file belongs?</h4>
|
||
|
||
<p>To determine a module in the project in question to which the specified <a href="architectural_overview/virtual_file.html"><span>virtual file</span></a> belongs, use the <code class="code highlight language-text">ProjectFileIndex.getModuleForFile(virtualFile)</code> method:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">Module</span> <span class="n">module</span> <span class="o">=</span> <span class="n">ProjectRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">project</span><span class="o">).</span><span class="na">getFileIndex</span><span class="o">().</span><span class="na">getModuleForFile</span><span class="o">(</span><span class="n">virtualFile</span><span class="o">);</span>
|
||
</code></pre>
|
||
|
||
<p>Note that this method returns <code class="code highlight language-text">null</code> if the file does not belong to any module.</p>
|
||
|
||
<p>You can also use the <code class="code highlight language-text">ProjectFileIndex.getContentRootForFile</code> method to get the module content root to which the specified file or directory belongs:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">VirtualFile</span> <span class="n">moduleContentRoot</span> <span class="o">=</span> <span class="n">ProjectRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">project</span><span class="o">).</span><span class="na">getFileIndex</span><span class="o">().</span><span class="na">getContentRootForFile</span><span class="o">(</span><span class="n">virtualFileorDirectory</span><span class="o">);</span>
|
||
</code></pre>
|
||
|
||
<a name="how-do-i-get-the-module-source-root-or-library-source-root-to-which-the-specified-file-or-directory-belongs" class="elem-anchor"></a>
|
||
<h4>How do I get the module source root or library source root to which the specified file or directory belongs?</h4>
|
||
|
||
<p>Use the <code class="code highlight language-text">ProjectFileIndex.getSourceRootForFile</code> method. For example:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">VirtualFile</span> <span class="n">moduleSourceRoot</span> <span class="o">=</span> <span class="n">ProjectRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">project</span><span class="o">).</span><span class="na">getFileIndex</span><span class="o">().</span><span class="na">getSourceRootForFile</span><span class="o">(</span><span class="n">virtualFileorDirectory</span><span class="o">);</span>
|
||
</code></pre>
|
||
|
||
<p>Note that this method returns <code class="code highlight language-text">null</code> if the file or directory does not belong to any source root of modules in the project.</p>
|
||
|
||
<a name="how-do-i-check-whether-a-file-or-directory-is-related-to-the-project-libraries" class="elem-anchor"></a>
|
||
<h4>How do I check whether a file or directory is related to the project libraries?</h4>
|
||
|
||
<p>The <code class="code highlight language-text">ProjectFileIndex</code> interface implements a number of methods you can use to check whether the specified file belongs to the project library classes or library sources.</p>
|
||
|
||
<p>You can use the following methods:</p>
|
||
|
||
<ul>
|
||
<li><code class="code highlight language-text">ProjectFileIndex.isLibraryClassFile(virtualFile)</code>: Returns <code class="code highlight language-text">true</code> if the specified <code class="code highlight language-text">virtualFile</code> is a compiled class file.</li>
|
||
<li><code class="code highlight language-text">ProjectFileIndex.isInLibraryClasses(virtualFileorDirectory)</code>: Returns <code class="code highlight language-text">true</code> if the specified <code class="code highlight language-text">virtualFileorDirectory</code> belongs to library classes.</li>
|
||
<li><code class="code highlight language-text">ProjectFileIndex.isInLibrarySource(virtualFileorDirectory)</code>: Returns <code class="code highlight language-text">true</code> if the specified <code class="code highlight language-text">virtualFileorDirectory</code> belongs to library sources.</li>
|
||
</ul>
|
||
|
||
<a name="how-do-i-get-the-project-sdk" class="elem-anchor"></a>
|
||
<h4>How do I get the project SDK?</h4>
|
||
|
||
<ul>
|
||
<li>To get the project-level SDK: <code class="code highlight language-text">Sdk projectSDK = ProjectRootManager.getInstance(project).getProjectSdk();</code></li>
|
||
<li>To get the project-level SDK name: <code class="code highlight language-text">String projectSDKName = ProjectRootManager.getInstance(project).getProjectSdkName();</code></li>
|
||
</ul>
|
||
|
||
<a name="how-do-i-set-the-project-sdk" class="elem-anchor"></a>
|
||
<h4>How do I set the project SDK?</h4>
|
||
|
||
<ul>
|
||
<li>To set the project-level SDK: <code class="code highlight language-text">ProjectRootManager.getInstance(project).setProjectSdk(Sdk jdk);</code></li>
|
||
<li>To set the project-level SDK name: <code class="code highlight language-text">ProjectRootManager.getInstance(project).setProjectSdkName(String name);</code></li>
|
||
</ul>
|
||
|
||
<p>Note that by default, the project modules use the project SDK. Optionally, you can configure individual SDK for each module.</p>
|
||
|
||
<a name="working-with-modules" class="elem-anchor"></a>
|
||
<h2>Working with Modules<a href="#working-with-modules" class="anchor-link"><span></span></a></h2>
|
||
|
||
<p>The <em>IntelliJ Platform</em> provides a number of Java classes and interfaces you can use to work with modules:</p>
|
||
|
||
<ul>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/module/ModuleManager.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ModuleManager</code></span></a> abstract class.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/core-api/src/com/intellij/openapi/module/Module.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">Module</code></span></a> interface.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/roots/ModuleRootManager.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ModuleRootManager</code></span></a> abstract class.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/roots/ModuleRootModel.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ModuleRootModel</code></span></a> interface.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ModuleUtil</code></span></a> class.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/module/ModifiableModuleModel.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ModifiableModuleModel</code></span></a> interface.</li>
|
||
<li><a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/roots/ModifiableRootModel.java" data-bypass="yes" target="_blank"><span><code class="code highlight language-text">ModifiableRootModel</code></span></a> interface.</li>
|
||
</ul>
|
||
|
||
<p>This section discusses how to complete some common tasks related to management of modules.</p>
|
||
|
||
<a name="how-do-i-get-a-list-of-modules-the-project-includes" class="elem-anchor"></a>
|
||
<h3>How do I get a list of modules the project includes?<a href="#how-do-i-get-a-list-of-modules-the-project-includes" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>Use the <code class="code highlight language-text">ModuleManager.getModules()</code> method.</p>
|
||
|
||
<a name="how-do-i-get-dependencies-and-classpath-of-a-module" class="elem-anchor"></a>
|
||
<h3>How do I get dependencies and classpath of a module?<a href="#how-do-i-get-dependencies-and-classpath-of-a-module" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p><em>Order entries</em> include SDK, libraries and other modules the module uses. With the <em>IntelliJ IDEA</em> UI, you can view order entries for a module on the <a href="http://www.jetbrains.com/idea/help/dependencies-tab.html" data-bypass="yes" target="_blank"><span>Dependencies</span></a> tab of the <em>Project Structure</em> dialog box.</p>
|
||
|
||
<p>To explore the <a href="http://www.jetbrains.com/idea/help/dependencies-tab.html" data-bypass="yes" target="_blank"><span>module dependencies</span></a>, use the <a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/roots/OrderEnumerator.java" data-bypass="yes" target="_blank"><span>OrderEnumerator</span></a> class.</p>
|
||
|
||
<p>The following code snippet illustrates how you can get classpath (classes root of all dependencies) for a module:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">VirtualFile</span><span class="o">[]</span> <span class="n">roots</span> <span class="o">=</span> <span class="n">ModuleRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">module</span><span class="o">).</span><span class="na">orderEntries</span><span class="o">().</span><span class="na">classes</span><span class="o">().</span><span class="na">getRoots</span><span class="o">();</span>
|
||
</code></pre>
|
||
|
||
<a name="how-do-i-get-the-sdk-the-module-uses" class="elem-anchor"></a>
|
||
<h3>How do I get the SDK the module uses?<a href="#how-do-i-get-the-sdk-the-module-uses" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>Use the <code class="code highlight language-text">ModuleRootManager.getSdk()</code> method. This method returns a value of the <a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/projectRoots/Sdk.java" data-bypass="yes" target="_blank"><span>Sdk</span></a> type.</p>
|
||
|
||
<p>The following code snippet illustrates how you can get detailed information on SDK the specified module uses:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">ModuleRootManager</span> <span class="n">moduleRootManager</span> <span class="o">=</span> <span class="n">ModuleRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">module</span><span class="o">);</span>
|
||
<span class="n">Sdk</span> <span class="n">SDK</span> <span class="o">=</span> <span class="n">moduleRootManager</span><span class="o">.</span><span class="na">getSdk</span><span class="o">();</span>
|
||
<span class="n">String</span> <span class="n">jdkInfo</span> <span class="o">=</span> <span class="s">"Module: "</span> <span class="o">+</span> <span class="n">module</span><span class="o">.</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">" SDK: "</span> <span class="o">+</span> <span class="n">SDK</span><span class="o">.</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">" SDK version: "</span>
|
||
<span class="o">+</span> <span class="n">SDK</span><span class="o">.</span><span class="na">getVersionString</span><span class="o">()</span> <span class="o">+</span> <span class="s">" SDK home directory: "</span> <span class="o">+</span> <span class="n">SDK</span><span class="o">.</span><span class="na">getHomePath</span><span class="o">();</span>
|
||
</code></pre>
|
||
|
||
<a name="how-do-i-get-a-list-of-modules-on-which-this-module-directly-depends" class="elem-anchor"></a>
|
||
<h3>How do I get a list of modules on which this module directly depends?<a href="#how-do-i-get-a-list-of-modules-on-which-this-module-directly-depends" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>Use the <code class="code highlight language-text">ModuleRootManager.getDependencies()</code> method to get an array of the <code class="code highlight language-text">Module</code> type values or the <code class="code highlight language-text">ModuleRootManager.getDependencyModuleNames()</code> to get an array of module names. To clarify, consider the following code snippet:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">ModuleRootManager</span> <span class="n">moduleRootManager</span> <span class="o">=</span> <span class="n">ModuleRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">module</span><span class="o">);</span>
|
||
<span class="n">Module</span><span class="o">[]</span> <span class="n">dependentModules</span> <span class="o">=</span> <span class="n">moduleRootManager</span><span class="o">.</span><span class="na">getDependencies</span><span class="o">();</span>
|
||
<span class="n">String</span><span class="o">[]</span> <span class="n">dependentModulesNames</span> <span class="o">=</span> <span class="n">moduleRootManager</span><span class="o">.</span><span class="na">getDependencyModuleNames</span><span class="o">();</span>
|
||
</code></pre>
|
||
|
||
<a name="how-do-i-get-a-list-of-modules-that-depend-on-this-module" class="elem-anchor"></a>
|
||
<h3>How do I get a list of modules that depend on this module?<a href="#how-do-i-get-a-list-of-modules-that-depend-on-this-module" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>Use the <code class="code highlight language-text">ModuleManager.getModuleDependentModules(module)</code> method.</p>
|
||
|
||
<p>Note that you can also check whether a module (<em>module1</em>) depends on another specified module (<em>module2</em>) using the <code class="code highlight language-text">ModuleManager.isModuleDependent</code> method in the following way:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="kt">boolean</span> <span class="n">isDependent</span> <span class="o">=</span> <span class="n">ModuleManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">project</span><span class="o">).</span><span class="na">isModuleDependent</span><span class="o">(</span><span class="n">module1</span><span class="o">,</span><span class="n">module2</span><span class="o">);</span>
|
||
</code></pre>
|
||
|
||
<a name="how-do-i-get-a-module-to-which-the-specified-file-or-psi-element-belongs" class="elem-anchor"></a>
|
||
<h3>How do I get a module to which the specified file or PSI element belongs?<a href="#how-do-i-get-a-module-to-which-the-specified-file-or-psi-element-belongs" class="anchor-link"><span></span></a></h3>
|
||
|
||
<ul>
|
||
<li>
|
||
<p>To get the project module to which the specified file belongs, use the <code class="code highlight language-text">ModuleUtil.findModuleForFile()</code> static method.</p>
|
||
|
||
<p>To clarify, consider the following code snippet:</p>
|
||
|
||
<p><code class="code highlight language-text">java
|
||
String pathToFile = "C:\\users\\firstName.LastName\\plugins\\myPlugin\src\MyAction.java";
|
||
VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByPath(pathToFile);
|
||
Module module = ModuleUtil.findModuleForFile(virtualFile,myProject);
|
||
String moduleName = module == null ? "Module not found" : module.getName();
|
||
</code></p>
|
||
</li>
|
||
<li>
|
||
<p>To get the project module to which the specified <a href="architectural_overview/psi_elements.html"><span>PSI element</span></a> belongs, use the <code class="code highlight language-text">ModuleUtil.findModuleForPsiElement(psiElement)</code> method.</p>
|
||
</li>
|
||
</ul>
|
||
|
||
<a name="how-do-i-work-with-libraries-available-within-a-module" class="elem-anchor"></a>
|
||
<h3>How do I work with libraries available within a module?<a href="#how-do-i-work-with-libraries-available-within-a-module" class="anchor-link"><span></span></a></h3>
|
||
|
||
<a name="how-do-i-get-a-list-of-libraries-available-within-a-module" class="elem-anchor"></a>
|
||
<h4>How do I get a list of libraries available within a module?</h4>
|
||
|
||
<p>To get the list of libraries, use <code class="code highlight language-text">OrderEnumerator.forEachLibrary</code> method.
|
||
To clarify this, consider the following code snippet that illustrates how to output the list of libraries for the specified module:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="kd">final</span> <span class="n">List</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">libraryNames</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="o"><</span><span class="n">String</span><span class="o">>();</span>
|
||
<span class="n">ModuleRootManager</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">module</span><span class="o">).</span><span class="na">orderEntries</span><span class="o">().</span><span class="na">forEachLibrary</span><span class="o">(</span><span class="k">new</span> <span class="n">Processor</span><span class="o"><</span><span class="n">Library</span><span class="o">>()</span> <span class="o">{</span>
|
||
<span class="nd">@Override</span>
|
||
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">process</span><span class="o">(</span><span class="n">Library</span> <span class="n">library</span><span class="o">)</span> <span class="o">{</span>
|
||
<span class="n">libraryNames</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">library</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
|
||
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
|
||
<span class="o">}</span>
|
||
<span class="o">});</span>
|
||
<span class="n">Messages</span><span class="o">.</span><span class="na">showInfoMessage</span><span class="o">(</span><span class="n">StringUtil</span><span class="o">.</span><span class="na">join</span><span class="o">(</span><span class="n">libraryNames</span><span class="o">,</span> <span class="s">"\n"</span><span class="o">),</span> <span class="s">"Libraries in Module"</span><span class="o">);</span>
|
||
</code></pre>
|
||
|
||
<p>This sample code outputs a list of libraries for the <code class="code highlight language-text">module</code> module.</p>
|
||
|
||
<a name="how-do-i-get-the-library-content" class="elem-anchor"></a>
|
||
<h4>How do I get the library content?</h4>
|
||
|
||
<p>The <code class="code highlight language-text">Library</code> class provides the <code class="code highlight language-text">getUrls</code> method you can use to get a list of source roots and classes the library includes. To clarify, consider the following code snippet:</p>
|
||
|
||
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">StringBuilder</span> <span class="n">roots</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="o">(</span><span class="s">"The "</span> <span class="o">+</span> <span class="n">lib</span><span class="o">.</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">" library includes:\n"</span><span class="o">);</span>
|
||
<span class="n">roots</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="s">"Sources:\n"</span><span class="o">);</span>
|
||
<span class="k">for</span> <span class="o">(</span><span class="n">String</span> <span class="n">each</span> <span class="o">:</span> <span class="n">lib</span><span class="o">.</span><span class="na">getUrls</span><span class="o">(</span><span class="n">OrderRootType</span><span class="o">.</span><span class="na">SOURCES</span><span class="o">))</span> <span class="o">{</span>
|
||
<span class="n">roots</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">each</span><span class="o">).</span><span class="na">append</span><span class="o">(</span><span class="s">"\n"</span><span class="o">);</span>
|
||
<span class="o">}</span>
|
||
<span class="n">roots</span><span class="o">.</span><span class="na">append</span><span class="s">"Classes:\n"</span><span class="o">);</span>
|
||
<span class="k">for</span> <span class="o">(</span><span class="n">String</span> <span class="n">each</span> <span class="o">:</span> <span class="n">lib</span><span class="o">.</span><span class="na">getUrls</span><span class="o">(</span><span class="n">OrderRootType</span><span class="o">.</span><span class="na">CLASSES</span><span class="o">))</span> <span class="o">{</span>
|
||
<span class="n">strRoots</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">each</span><span class="o">).</span><span class="na">append</span><span class="o">(</span><span class="s">"\n"</span><span class="o">);</span>
|
||
<span class="o">}</span>
|
||
<span class="n">Messages</span><span class="o">.</span><span class="na">showInfoMessage</span><span class="o">(</span><span class="n">roots</span><span class="o">.</span><span class="na">toString</span><span class="o">(),</span> <span class="s">"Library Info"</span><span class="o">);</span>
|
||
</code></pre>
|
||
|
||
<p>In this sample code, <code class="code highlight language-text">lib</code> is of the <a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/projectModel-api/src/com/intellij/openapi/roots/libraries/Library.java" data-bypass="yes" target="_blank"><span>Library</span></a> type.</p>
|
||
|
||
<a name="how-do-i-get-a-set-of-facets-the-module-includes" class="elem-anchor"></a>
|
||
<h3>How do I get a set of facets the module includes?<a href="#how-do-i-get-a-set-of-facets-the-module-includes" class="anchor-link"><span></span></a></h3>
|
||
|
||
<p>Use the <a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/lang-api/src/com/intellij/facet/FacetManager.java" data-bypass="yes" target="_blank"><span>FacetManager</span></a> and <a href="https://upsource.jetbrains.com/idea-ce/file/idea-ce-1731d054af4ca27aa827c03929e27eeb0e6a8366/platform/lang-api/src/com/intellij/facet/Facet.java" data-bypass="yes" target="_blank"><span>Facet</span></a> classes.</p>
|
||
|
||
|
||
<div class="last-modified">
|
||
Last modified: 13 December 2015
|
||
</div>
|
||
</article>
|
||
|
||
<section class="disqus">
|
||
<div id="disqus_thread"></div>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
</div>
|
||
|
||
|
||
<script data-main="/intellij/sdk/docs/app/js/main.build" data-baseurl="/intellij/sdk/docs/" src="/intellij/sdk/docs/app/js/vendor/requirejs/require.js"></script>
|
||
|
||
</body>
|
||
</html>
|
||
|