Current version: legacy_modded-0_26_1-01
- June 12, 2019. Kotlin 1.3 support, and release of
legacy_modded-0_26_1-01
- June 11, 2019. Fix to kotlin worker to allow modern dagger to be used in kapt. (worker was leaking its dagger dep)
- May 17, 2019. More changes from upstream (mostly fixes for bazel version bump) and releases from the fork
- April 1, 2019. Roadmap for rules_kotlin published. The
cgruber
fork will continue until the legacy branch in the parent repo can be updated (or no one needs the fork) - February 20, 2019. Future directions of rules_kotlin.
- October 24, 2018. Christian Gruber forks the main kotlin rules repository, adding in two fixes.
- August 14, 2018. Js support. No documentation yet but see the nested example workspace
examples/node
. - August 14, 2018. Android support. No documentation but it's a simple integration. see
kotlin/internal/jvm/android.bzl
. - Jun 29, 2018. The commits from this date forward are compatible with bazel
>=0.14
. JDK9 host issues were fixed as well some other deprecations. I recommend skipping0.15.0
if you are on a Mac. - May 25, 2018. Test "friend" support. A single friend dep can be provided to
kt_jvm_test
which allows the test to access internal members of the module under test. - February 15, 2018. Toolchains for the JVM rules. Currently this allow tweaking:
- The JVM target (bytecode level).
- API and Language levels.
- Coroutines, enabled by default.
- February 9, 2018. Annotation processing.
- February 5, 2018. JVM rule name change: the prefix has changed from
kotlin_
tokt_jvm_
.
These rules were initially forked from pubref/rules_kotlin, and then re-forked from bazelbuild/rules_kotlin
Key changes:
- Replace the macros with three basic rules.
kt_jvm_binary
,kt_jvm_library
andkt_jvm_test
. - Android rules.
kt_android_library
andkt_android_binary
- Friend support for tests (supports access to
internal
types and functions) - Use a single
deps
attribute instead ofjava_dep
anddep
. - Add support for the following standard java rules attributes:
data
resource_jars
runtime_deps
resources
resources_strip_prefix
exports
- Persistent worker support.
- Mixed-Mode compilation (compile Java and Kotlin in one pass).
- Configurable Kotlinc distribtution and verison
- Configurable Toolchain
- Kotlin 1.3 support
In the project's WORKSPACE
, declare the external repository and initialize the toolchains, like
this:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
rules_kotlin_version = "legacy-modded-0_26_1-01"
rules_kotlin_sha = "b943379a6b48156cb542cee4502a463a6e2edeb307d1a4cabd0309ca2bf3f10f"
http_archive(
name = "io_bazel_rules_kotlin",
urls = ["https://github.com/cgruber/rules_kotlin/archive/%s.zip" % rules_kotlin_version],
type = "zip",
strip_prefix = "rules_kotlin-%s" % rules_kotlin_version,
sha256 = rules_kotlin_sha,
)
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories", "kt_register_toolchains")
kotlin_repositories() # if you want the default. Otherwise see custom kotlinc distribution below
kt_register_toolchains() # to use the default toolchain, otherwise see toolchains below
In your project's BUILD
files, load the kotlin rules and use them like so:
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_library")
kt_jvm_library(
name = "package_name",
srcs = glob(["*.kt"]),
deps = [
"//path/to/dependency",
],
)
To enable a custom toolchain (to configure language level, etc.)
do the following. In a <workspace>/BUILD.bazel
file define the following:
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "define_kt_toolchain")
define_kt_toolchain(
name = "kotlin_toolchain",
api_version = KOTLIN_LANGUAGE_LEVEL, # "1.1", "1.2", or "1.3"
jvm_target = JAVA_LANGUAGE_LEVEL, # "1.6" or "1.8"
language_version = KOTLIN_LANGUAGE_LEVEL, # "1.1", "1.2", or "1.3"
)
and then in your WORKSPACE
file, instead of kt_register_toolchains()
do
register_toolchains("//:kotlin_toolchain")
To choose a different kotlinc distribution (only 1.3 variants supported), do the following
in your WORKSPACE
file (or import from a .bzl
file:
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories")
KOTLIN_VERSION = "1.3.31"
KOTLINC_RELEASE_SHA = "107325d56315af4f59ff28db6837d03c2660088e3efeb7d4e41f3e01bb848d6a"
KOTLINC_RELEASE = {
"urls": [
"https://github.com/JetBrains/kotlin/releases/download/v{v}/kotlin-compiler-{v}.zip".format(v = KOTLIN_VERSION),
],
"sha256": KOTLINC_RELEASE_SHA,
}
kotlin_repositories(compiler_release = KOTLINC_RELEASE)
This project is licensed under the Apache 2.0 license, as are all contributions
See the CONTRIBUTING doc for information about how to contribute to this project.