Skip to content

Commit 68c16fb

Browse files
authored
Users can define Pkl JARs to use for pkl_java_library outputs (#72)
Previously, the result of using the `pkl_java_library` would produce a `java_library` the directly depends on `//pkl/private:pkl-tools`. This has been stripped back to only include `pkl-config-java`, and if users wish to, they can define the Pkl libraries that this uses themselves. All they need to do is provide one of the following libraries themselves: - pkl-config-java - pkl-config-java-all - pkl-tools By default, if `pkl_deps` isn't defined on `pkl_java_library`, it will continue to use `//pkl/private:pkl-config-java-internal`.
1 parent f374d4e commit 68c16fb

File tree

10 files changed

+812
-12
lines changed

10 files changed

+812
-12
lines changed

MODULE.bazel

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
5353
maven.install(
5454
name = "rules_pkl_deps",
5555
artifacts = [
56+
"org.pkl-lang:pkl-tools:0.28.2",
57+
"org.pkl-lang:pkl-config-java:0.28.2",
5658
"org.pkl-lang:pkl-tools:0.28.2",
5759
"org.jetbrains.kotlin:kotlin-stdlib:2.0.21",
5860
"com.google.code.gson:gson:2.12.1",
@@ -68,6 +70,21 @@ use_repo(
6870
"rules_pkl_deps",
6971
"unpinned_rules_pkl_deps",
7072
)
73+
maven.install(
74+
name = "custom_pkl_java_library_maven_deps",
75+
artifacts = [
76+
"org.pkl-lang:pkl-config-java:0.28.2",
77+
],
78+
lock_file = "//pkl/private:pkl_deps_custom_java_library_maven_deps_install.json",
79+
repositories = [
80+
"https://repo1.maven.org/maven2/",
81+
],
82+
)
83+
use_repo(
84+
maven,
85+
"custom_pkl_java_library_maven_deps",
86+
"unpinned_custom_pkl_java_library_maven_deps",
87+
)
7188

7289
bazel_binaries = use_extension(
7390
"@rules_bazel_integration_test//:extensions.bzl",

docs/rules_pkl_docs.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ Generate documentation website for Pkl files.
202202
<pre>
203203
load("@rules_pkl//pkl:defs.bzl", "pkl_java_library")
204204

205-
pkl_java_library(<a href="#pkl_java_library-name">name</a>, <a href="#pkl_java_library-srcs">srcs</a>, <a href="#pkl_java_library-module_path">module_path</a>, <a href="#pkl_java_library-generate_getters">generate_getters</a>, <a href="#pkl_java_library-deps">deps</a>, <a href="#pkl_java_library-tags">tags</a>, <a href="#pkl_java_library-kwargs">kwargs</a>)
205+
pkl_java_library(<a href="#pkl_java_library-name">name</a>, <a href="#pkl_java_library-srcs">srcs</a>, <a href="#pkl_java_library-module_path">module_path</a>, <a href="#pkl_java_library-generate_getters">generate_getters</a>, <a href="#pkl_java_library-deps">deps</a>, <a href="#pkl_java_library-pkl_java_deps">pkl_java_deps</a>, <a href="#pkl_java_library-tags">tags</a>, <a href="#pkl_java_library-kwargs">kwargs</a>)
206206
</pre>
207207

208208
Create a compiled JAR of Java source files generated from Pkl source files.
@@ -217,6 +217,7 @@ Create a compiled JAR of Java source files generated from Pkl source files.
217217
| <a id="pkl_java_library-module_path"></a>module_path | List of Java module targets. Must export provide the JavaInfo provider. | `[]` |
218218
| <a id="pkl_java_library-generate_getters"></a>generate_getters | Generate private final fields and public getter methods instead of public final fields. Defaults to True. | `None` |
219219
| <a id="pkl_java_library-deps"></a>deps | Other targets to include in the Pkl module path when building this Java library. Must be pkl_* targets. | `[]` |
220+
| <a id="pkl_java_library-pkl_java_deps"></a>pkl_java_deps | The Pkl `java_library` targets to include in the produced Java library as deps. Must be `JavaInfo` targets. Defaults to an internal `pkl-config-java` label. | `[Label("@rules_pkl//pkl/private:pkl-config-java-internal")]` |
220221
| <a id="pkl_java_library-tags"></a>tags | Bazel tags to add to this target. | `[]` |
221222
| <a id="pkl_java_library-kwargs"></a>kwargs | Further keyword arguments. E.g. visibility. | none |
222223

pkl/private/BUILD.bazel

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,15 @@ sh_binary(
3939
visibility = ["//visibility:public"],
4040
)
4141

42-
# Export the `pkl-tools` library from the ruleset so `bzlmod`-enabled builds
43-
# can link against it.
42+
# Export the `pkl-config-java` library from the ruleset so it can be used in the default codegen toolchain.
43+
# Rules/macro implementations should not refer to this target directly (otherwise they'll take away the user's ability
44+
# to override it). They can instead inject their own `pkl-config-java` or `pkl-tools` on `pkl_java_library` using `pkl_deps`.
4445
java_library(
45-
name = "pkl-tools",
46+
name = "pkl-config-java-internal",
4647
visibility = ["//visibility:public"],
4748
exports = [
4849
artifact(
49-
"org.pkl-lang:pkl-tools",
50+
"org.pkl-lang:pkl-config-java",
5051
repository_name = "rules_pkl_deps",
5152
),
5253
],

pkl/private/pkl_codegen_java.bzl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ _pkl_java_src_jar = rule(
113113
],
114114
)
115115

116-
def pkl_java_library(name, srcs, module_path = [], generate_getters = None, deps = [], tags = [], **kwargs):
116+
def pkl_java_library(name, srcs, module_path = [], generate_getters = None, deps = [], pkl_java_deps = [Label("//pkl/private:pkl-config-java-internal")], tags = [], **kwargs):
117117
"""Create a compiled JAR of Java source files generated from Pkl source files.
118118
119119
Args:
@@ -122,6 +122,7 @@ def pkl_java_library(name, srcs, module_path = [], generate_getters = None, deps
122122
module_path: List of Java module targets. Must export provide the JavaInfo provider.
123123
generate_getters: Generate private final fields and public getter methods instead of public final fields. Defaults to True.
124124
deps: Other targets to include in the Pkl module path when building this Java library. Must be pkl_* targets.
125+
pkl_java_deps: The Pkl `java_library` targets to include in the produced Java library as deps. Must be `JavaInfo` targets. Defaults to an internal `pkl-config-java` label.
125126
tags: Bazel tags to add to this target.
126127
**kwargs: Further keyword arguments. E.g. visibility.
127128
"""
@@ -140,11 +141,9 @@ def pkl_java_library(name, srcs, module_path = [], generate_getters = None, deps
140141
tags = tags,
141142
)
142143

143-
pkl_deps = [Label("//pkl/private:pkl-tools")]
144-
145144
# Ensure that there are no duplicate entries in the deps
146145
all_deps = depset(
147-
pkl_deps + [native.package_relative_label(m) for m in module_path],
146+
pkl_java_deps + [native.package_relative_label(m) for m in module_path],
148147
transitive = depsets,
149148
)
150149

0 commit comments

Comments
 (0)