| # Using KSP2 from Command Line | |
| KSP2 has 4 main classes, one for each platform: `KSPJvmMain`, `KSPJsMain`, `KSPNativeMain`, `KSPCommonMain`. They reside | |
| in the same jars from the | |
| [artifacts.zip](https://github.com/google/ksp/releases/download/2.3.7/artifacts.zip) in the | |
| [release page](https://github.com/google/ksp/releases/tag/2.3.7): | |
| * `symbol-processing-aa-2.3.7.jar` | |
| and depend on: | |
| * `symbol-processing-common-deps-2.3.7.jar` | |
| You’ll also need the Kotlin runtime: | |
| * `kotlin-stdlib-2.3.20.jar` | |
| * `kotlinx-coroutines-core-jvm-1.10.2.jar` | |
| > Note: You can find the latest release here: https://github.com/google/ksp/releases/latest. | |
| > | |
| > Replace any occurrence of `2.3.7` in this document with the version you are using. | |
| Taking `KSPJvmMain` for example, | |
| ``` | |
| java -cp \ | |
| symbol-processing-aa-2.3.7.jar:kotlin-analysis-api-2.3.7.jar:common-deps-2.3.7.jar:symbol-processing-api-2.3.7.jar:kotlin-stdlib-2.3.20.jar:kotlinx-coroutines-core-jvm-1.10.2.jar \ | |
| com.google.devtools.ksp.cmdline.KSPJvmMain \ | |
| -jvm-target 11 \ | |
| -module-name=main \ | |
| -source-roots project_dir/src/kotlin/main \ | |
| -project-base-dir project_dir/ \ | |
| -output-base-dir=project_dir/build/ \ | |
| -caches-dir=project_dir/build/caches/ \ | |
| -class-output-dir=project_dir/build/out/main/classes \ | |
| -kotlin-output-dir=project_dir/build/out/main/kotlin/ \ | |
| -java-output-dir project_dir/build/out/main/java/ \ | |
| -resource-output-dir project_dir/build/out/main/res/ \ | |
| -language-version=2.0 \ | |
| -api-version=2.0 \ | |
| path/to/processor.jar | |
| ``` | |
| A comprehensive options list can be obtained with `-h`: | |
| ``` | |
| Available options: | |
| -java-source-roots=List<File> | |
| * -java-output-dir=File | |
| -jdk-home=File? | |
| * -jvm-target=String | |
| -jvm-default-mode=String | |
| * -module-name=String | |
| * -source-roots=List<File> | |
| -common-source-roots=List<File> | |
| -libraries=List<File> | |
| -friends=List<File> | |
| -processor-options=Map<String, String> | |
| * -project-base-dir=File | |
| * -output-base-dir=File | |
| * -caches-dir=File | |
| * -class-output-dir=File | |
| * -kotlin-output-dir=File | |
| * -resource-output-dir=File | |
| -incremental=Boolean | |
| -incremental-log=Boolean | |
| -modified-sources=List<File> | |
| -removed-sources=List<File> | |
| -changed-classes=List<String> | |
| * -language-version=String | |
| * -api-version=String | |
| -all-warnings-as-errors=Boolean | |
| -map-annotation-arguments-in-java=Boolean | |
| * <processor classpath> | |
| where: | |
| * is required | |
| List is colon separated. E.g., arg1:arg2:arg3 | |
| Map is in the form key1=value1:key2=value2 | |
| ``` | |
| ## Notable options | |
| * `-libraries` - classpath of the dependencies of the source files. This is usually the module compile classpath. | |
| * `-jdk-home` - Useful when the processor does not resolve java symbols. Pointing to a JDK home directory | |
| (e.g. `~/.sdkman/candidates/java/current`) will help the processor locate the Java standard library. | |
| * `-friends` - classpath of the modules that are friends of the current module. This is usually the | |
| submodules this module depends on. Supported since [2.1.21-2.0.2](https://github.com/google/ksp/releases/tag/2.1.21-2.0.2). See also [friend modules](https://kotlinlang.org/api/kotlin-gradle-plugin/kotlin-gradle-plugin-api/org.jetbrains.kotlin.gradle.tasks/-base-kotlin-compile/friend-paths.html). | |
| ### Jvm Parameters | |
| * `-Dksp.logging` - logging level, one of `error`, `warn` or `warning`, `info`, `debug`. Default is `warn`. If an unrecognized level is specified, it will be treated as `warn`. |