{namespace buck.project}

/***/
{template .soyweb}
  {call buck.page}
    {param title: 'buck project' /}
    {param description}
      A command that generates the configuration files for an IDE to build the
      project using the IDE.
    {/param}
    {param content}


{call buck.command}
{param overview}
Generates the configuration files for an IDE to build the project using that
IDE.

<p>

Currently, only IntelliJ is supported.

<p>

This command processes all of the {call buck.project_config /} rules across all
of the BUCK files and uses them to generate the configuration files for an IDE.

<p>

In the case of IntelliJ, the generated files include:

<ul>
  <li>
    {sp}<code>.idea/libraries&#x2F;*.xml</code>, each of which defines a library
    in IntelliJ. A library always corresponds to
    a {call buck.prebuilt_jar /}.
  </li>
  <li>
    {sp}<code>.iml</code> files, each of which defines a module in IntelliJ. An
    {sp}<code>.iml</code> file will be created in each directory with
    a <a href="{ROOT}concept/build_file.html"><code>BUCK</code></a> file that
    has a {call buck.project_config /}.
    A module can depend on other modules, as well as libraries.
  </li>
  <li>
    {sp}<code>.idea/modules.xml</code>, which lists all of the IntelliJ modules
    in the project.
  </li>
</ul>

<p>

Therefore, running <code>buck project</code> creates all of the above files for
IntelliJ in-place in the repository. This is unlike other Buck commands that
generate outputs in separate directories that will be deleted by
running <a href="{ROOT}command/clean.html"><code>buck clean</code></a>.

<p>

Note that all files generated by <code>buck project</code> should be listed in
{sp}<code>.gitignore</code>.

{/param}

{param params}

{call buck.param}
  {param name: 'targets' /}
  {param desc}
    The list of targets to build a project for to generate a slice of a project containing only the
    code for the specified targets.  This is useful for large repositories.
  {/param}
{/call}

{call buck.param}
  {param name: '--without-tests' /}
  {param desc}
    Indicates that Buck should build a project slice without tests (the default is to include any
    tests that reference the targets in the project with <code>source_under_test</code>).
  {/param}
{/call}

{/param}

{/call}

    {/param}  // content
  {/call} // buck.page
{/template}
