-
(mandatory) Install a JDK (any version between 17 - 21).
-
(recommended) Install IntelliJ IDEA
To import the project into IntelliJ, go to File→Open and select the project’s root directory. If the project is opened but not imported, look for a popup in the lower right corner and click its "Import Gradle Project" link. -
(recommended) Install gng
gng enables to run Gradle commands withgw
(instead of./gradlew
) from any subdirectory. -
(recommended) Set up Git ignore-revs
git config blame.ignoreRevsFile .git-blame-ignore-revs
-
(recommended) Install jenv and plugins
jenv use specific JDK versions in certain subdirectories. Pkl comes with a.java-version
file specifying JDK 17.
Enable jenv plugins for better handling bygradle
:jenv enable-plugin gradle jenv enable-plugin export
-
(optional) If you’ve named the original apple/pkl git repository something other than
origin
, set env varPKL_ORIGINAL_REMOTE_NAME
to that name in your.bashrc
,.zshrc
,config.fish
or however you manage your local environment.This will allow spotless to pick the correct starting branch when formatting source code files. Otherwise, you might see that every file has its copyright year updated.
-
(optional) To build the native executable (
./gradlew buildNative
), install Prerequisites For Native Image on Linux.
-
(optional) Go to
System→For developers
and enableDeveloper Mode
. Otherwise, some tests may fail due to insufficient file system privileges. -
(optional) To build the native executable (
./gradlew buildNative
), install Prerequisites For Native Image on Windows.
gw clean
gw test # run all tests except native executable tests
gw testNative # run native executable tests
gw spotlessApply # fix code formatting
gw build # build everything except native executables
gw buildNative # build native executable(s) for current platform
# (Alpine executable is only built if ~/staticdeps/bin/musl-gcc exists)
pkl-cli/build/executable/jpkl # run Java executable
pkl-cli/build/executable/pkl-macos-aarch64 # run Mac executable
pkl-cli/build/executable/pkl-macos-amd64 # run Intel Mac executable
pkl-cli/build/executable/pkl-linux-amd64 # run Linux executable
pkl-cli/build/executable/pkl-alpine-linux-amd64 # run Alpine Linux executable
pkl-cli/build/executable/pkl-windows-amd64.exe # run Windows executable
-
Go to https://gradle.org/release-checksums/ and copy the checksum for the new Gradle version
-
Run the following command twice (until it prints UP-TO-DATE):
gw wrapper --gradle-version [version] --gradle-distribution-sha256-sum [sha]
-
Commit the updated wrapper files
-
(optional) Update gradle/libs.version.toml based on version information from https://search.maven.org, https://plugins.gradle.org, and GitHub repos
-
Run
gw updateDependencyLocks
-
Validate changes with
gw build buildNative
-
Review and commit the updated dependency lock files
-
Truffle code generation is performed by Truffle’s annotation processor, which runs as part of task
:pkl-core:compileJava
-
Output dir is
generated/truffle/
-
-
ANTLR code generation is performed by task
:pkl-core:generateGrammarSource
-
Output dir is
generated/antlr/
-
To enable remote JVM debugging when running Gradle tasks (e.g. test), add the flag -Djvmdebug=true
.
This will listen on port 5005.
Example: ./gradlew test -Djvmdebug=true
For automated build setup examples see our CircleCI jobs like our BuildNativeJob.pkl, where we build Pkl automatically.