Buck: kotlin_library()

kotlin_library()

This is liable to change in the future.

A kotlin_library() rule is used to define a set of Kotlin files that can be compiled together. The main output of a kotlin_library() rule is a single JAR file containing all of the compiled class files and resources.

Arguments

  • name (required) #

    The name of the rule.

  • srcs (defaults to []) #

    The set of .kt or .kts files to compile for this rule.

  • resources (defaults to []) #

    Static files to include among the compiled .class files. These files can be loaded via Class.getResource().

    Note: If resources_root isn't set, Buck uses the java.src_roots property in .buckconfig to help determine where resources should be placed within the generated JAR file.

  • resources_root (defaults to None) #

    The path that resources are resolved against. For example, if resources_root is "res" and resources contains the file "res/com/example/foo.txt", that file will end up as "com/example/foo.txt" in the output JAR. This parameter overrides the java.src_roots property in .buckconfig.

  • deps (defaults to []) #

    Rules (usually other kotlin_library rules) that are used to generate the classpath required to compile this kotlin_library.

  • extra_arguments (defaults to []) #

    List of additional arguments to pass into the Kotlin compiler.

  • remove_classes (defaults to []) #

    Specifies a list of Patterns that are used to excludeclasses from the JAR. The pattern matching is based on the name of the class. This can be used to exclude a member class or delete a local view of a class that will be replaced during a later stage of the build.

  • exported_deps (defaults to []) #

    Other kotlin_library rules that depend on this rule will also include its exported_deps 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 prebuilt_jar rules as a single target for callers to depend on. Targets in exported_deps are implicitly included in the deps of this rule, so they don't need to be repeated there.

  • provided_deps (defaults to []) #

    These represent dependencies that are known to be provided at run time, but are required in order for the code to compile. Examples of provided_deps include the JEE servlet APIs. When this rule is included in a kotlin_library, the provided_deps will not be packaged into the output.

  • labels (defaults to []) #

    Set of arbitrary strings which allow you to annotate a build rule with tags that can be searched for over an entire dependency tree using buck query attrfilter.

  • tests (defaults to []) #

    List of build targets that identify the test rules that exercise this target.

  • visibility (defaults to []) #

    List of build target patterns that identify the build rules that can include this rule in its deps.

  • licenses (defaults to []) #

    Set of license files for this library. To get the list of license files for a given build rule and all of its dependencies, you can use buck query.

  • labels (defaults to []) #

    Set of arbitrary strings which allow you to annotate a build rule with tags that can be searched for over an entire dependency tree using buck query attrfilter.

Examples

# A rule that compiles a single .kt file.
kotlin_library(
  name = 'JsonUtil',
  srcs = ['JsonUtil.kt'],
  deps = [
    '//third_party/guava:guava',
    '//third_party/jackson:jackson',
  ],
)

# A rule that compiles all of the .kt 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.
kotlin_library(
  name = 'messenger',
  srcs = glob(['**/*.kt'], excludes = ['MessengerModule.kt']),
  deps = [
    '//src/com/facebook/base:base',
    '//third_party/guava:guava',
  ],
)

kotlin_library(
  name = 'MessengerModule',
  srcs = ['MessengerModule.kt'],
  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.
kotlin_library(
  name = 'testutil',
  srcs = glob(['tests/**/*.kt'], excludes = 'tests/**/*Test.kt'),
  deps = [
    ':lib-fb4a',
    '//java/com/facebook/base:base',
  ],
)