blob: addc7604be3728b7f7bc69c147b528824a15770f [file] [log] [blame]
{namespace java_library}
/***/
{template .soyweb}
{call buck.page}
{param title: 'java_library()' /}
{param prettify: true /}
{param description}
A rule that is used to define a set of Java files that can be compiled
together.
{/param}
{param content}
{call buck.rule}
{param status: 'FROZEN' /}
{param overview}
A <code>java_library()</code> rule is used to define a set of Java
files that can be compiled together. The main output of a
{sp}<code>java_library()</code> rule is a single JAR file containing all
of the compiled class files and resources.
{/param}
{param args}
{call buck.arg}
{param name: 'name' /}
{param desc}
The name of the rule.
{/param}
{/call}
{call buck.arg}
{param name: 'srcs' /}
{param default : '[]' /}
{param desc}
The set of <code>.java</code> files to compile for this rule.
If any of the files in this list end in <code>.src.zip</code>,
then the entries in the ZIP file that end in <code>.java</code> will be
included as ordinary inputs to compilation. This is common when using
a {call buck.genrule /} to auto-generate some Java source code that
needs to be compiled with some hand-written Java code.
{/param}
{/call}
{call buck.arg}
{param name: 'resources' /}
{param default : '[]' /}
{param desc}
Static files to include among the compiled <code>.class</code>
{sp}files. These files can be loaded via <a
href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)"
target="_blank">Class.getResource()</a>.
<p>
<strong>Note:</strong> If <code>resources_root</code> isn't set, Buck uses
the <code>src_roots</code> property in <a
href="{ROOT}concept/buckconfig.html"><code>.buckconfig</code></a> to help
determine where resources should be placed within the generated JAR file.
<p>
{/param}
{/call}
{call buck.arg}
{param name: 'resources_root' /}
{param default : 'None' /}
{param desc}
The path that resources are resolved against. For example, if{sp}
<code>resources_root</code> is <code>"res"</code> and
{sp}<code>resources</code>{sp} contains the file{sp}
<code>"res/com/example/foo.txt"</code>, that file will end up as{sp}
<code>"com/example/foo.txt"</code> in the output JAR. This parameter
overrides the <code>src_roots</code> property in <a
href="{ROOT}concept/buckconfig.html"><code>.buckconfig</code></a>.
{/param}
{/call}
{call buck.arg}
{param name: 'deps' /}
{param default : '[]' /}
{param desc}
Rules (usually other <code>java_library</code> rules) that are used to
generate the classpath required to compile this <code>java_library</code>.
{/param}
{/call}
{call buck.arg}
{param name: 'source' /}
{param default : '<global value>' /}
{param desc}
Specifies the version of Java (as a string) to interpret source
files as.
Overrides the value in "source_level" in the "java" section
of <a
href="{ROOT}concept/buckconfig.html"><code>.buckconfig</code></a>.
{/param}
{/call}
{call buck.arg}
{param name: 'target' /}
{param default : '<global value>' /}
{param desc}
Specifies the version of Java (as a string) for which to
generate code.
Overrides the value in "target_level" in the "java" section
of <a
href="{ROOT}concept/buckconfig.html"><code>.buckconfig</code></a>.
{/param}
{/call}
{call buck.arg}
{param name: 'javac' /}
{param default : '<global value>' /}
{param desc}
Specifies the Java compiler program to use for this rule.
The value is a source path (e.g., //foo/bar:bar).
Only one of "javac" and "javac_jar" may be set for a given rule.
Overrides the value in "javac" in the "tools" section
of <a
href="{ROOT}concept/buckconfig.html"><code>.buckconfig</code></a>.
{/param}
{/call}
{call buck.arg}
{param name: 'javac_jar' /}
{param default : '<global value>' /}
{param desc}
Specifies the Java compiler program to use for this rule.
The value is a source path (e.g., //foo/bar:bar).
Only one of "javac_jar" and "javac" may be set for a given rule.
Overrides the value in "javac_jar" in the "tools" section
of <a
href="{ROOT}concept/buckconfig.html"><code>.buckconfig</code></a>.
{/param}
{/call}
{call buck.arg}
{param name: 'extra_arguments' /}
{param default : '[]' /}
{param desc}
List of additional arguments to pass into the Java compiler. These
arguments follow the ones specified in <a
href="{ROOT}concept/buckconfig.html"><code>.buckconfig</code></a>.
{/param}
{/call}
{call buck.arg}
{param name: 'exported_deps' /}
{param default : '[]' /}
{param desc}
Other <code>java_library</code> rules that depend on this rule will also
include its <code>exported_deps</code> in their classpaths. This is useful
when the public API of a rule has return types or checked exceptions that are
defined in another rule, which would otherwise require callers to add an
extra dependency. It's also useful for exposing e.g. a collection of
{sp}<code>prebuilt_jar</code> rules as a single target for callers to depend
on. Targets in <code>exported_deps</code> are implicitly included in the
{sp}<code>deps</code> of this rule, so they don't need to be repeated there.
{/param}
{/call}
{call buck.arg}
{param name: 'provided_deps' /}
{param default : '[]' /}
{param desc}
These represent dependencies that are known to be provided at run
time, but are required in order for the code to compile. Examples of
{sp}<code>provided_deps</code> include the JEE servlet APIs. When this
rule is included in a <code>java_binary</code>, the
{sp}<code>provided_deps</code> will not be packaged into the output.
{/param}
{/call}
{call buck.visibility_arg /}
{/param} // close args
{param examples}
{literal}<pre class="prettyprint lang-py">
# A rule that compiles a single .java file.
java_library(
name = 'JsonUtil',
srcs = ['JsonUtil.java'],
deps = [
'//third_party/guava:guava',
'//third_party/jackson:jackson',
],
)
# A rule that compiles all of the .java files under the directory in
# which the rule is defined using glob(). It also excludes an
# individual file that may have additional dependencies, so it is
# compiled by a separate rule.
java_library(
name = 'messenger',
srcs = glob(['**/*.java'], excludes = ['MessengerModule.java']),
deps = [
'//src/com/facebook/base:base',
'//third_party/guava:guava',
],
)
java_library(
name = 'MessengerModule',
srcs = ['MessengerModule.java'],
deps = [
'//src/com/facebook/base:base',
'//src/com/google/inject:inject',
'//third_party/guava:guava',
'//third_party/jsr-330:jsr-330',
],
)
# A rule that builds a library with both relative and
# fully-qualified deps.
java_library(
name = 'testutil',
srcs = glob(['tests/**/*.java'], excludes = 'tests/**/*Test.java'),
deps = [
':lib-fb4a',
'//java/com/facebook/base:base',
],
)
</pre>{/literal}
{/param}
{/call} // close buck.rule
{/param}
{/call}
{/template}