DEV Community

khalil la
khalil la

Posted on

Kotlin multiplatform inside NX workspace

Hi, I am nx-gradle creator and I want in this article to show how you can use it with Kotlin multiplatform.

Repo

We will use in this article the official repo-template from JetBrains : https://github.com/JetBrains/compose-multiplatform-template.git

So clone this repo and let's meet in the next step.

Install NX

Run this command to install nx : npx nx@latest init and choose same answers as me:

PS D:\Workspace\Projects\nx-compose-multiplatform> npx nx@latest init
Need to install the following packages:
  nx@16.4.0
Ok to proceed? (y) y
√ Where should your workspace be created? · false

 >  NX   Let's create a new workspace [https://nx.dev/getting-started/intro]

? Which stack do you want to use? ... 
√ Which stack do you want to use? · none
√ Package-based or integrated? · integrated
√ Enable distributed caching to make your CI faster · No

 >  NX   Creating your v16.4.0 workspace.

   To make sure the command works reliably in all environments, and that the preset is applied correctly,
   Nx will run "npm install" several times. Please wait.

√ Installing dependencies with npm
√ Successfully created the workspace: init.

 >  NX   Directory is already under version control. Skipping initialization of git.


 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 


 >  NX   First time using Nx? Check out this interactive Nx tutorial.

   https://nx.dev/tutorials/package-based-repo-tutorial

PS D:\Workspace\Projects\nx-compose-multiplatform> 
Enter fullscreen mode Exit fullscreen mode

Move files from init folder to the root folder

By default Nx will create a init folder where the files will be created. Lets move this files to the root folder and merge the two .gitignore files

Install nx-gradle

Now install nx-gradle by running this command : npm install --save-dev @jnxplus/nx-gradle

We will not use the init generator for nx-gradle to add gradle wrapper because it's already exist so we will add other required steps manually :

Add "io.github.khalilou88.jnxplus" gradle plugin

Add "io.github.khalilou88.jnxplus" gradle plugin to the build.gradle.kts file

plugins {
    // this is necessary to avoid the plugins to be loaded multiple times
    // in each subproject's classloader
    kotlin("multiplatform").apply(false)
    id("com.android.application").apply(false)
    id("com.android.library").apply(false)
    id("org.jetbrains.compose").apply(false)

    id("io.github.khalilou88.jnxplus") version "0.2.0"
}

Enter fullscreen mode Exit fullscreen mode

Add plugin to nx.json

Add nx-gradle to nx.json so we cann run nx graph

  },
  "plugins": ["@jnxplus/nx-gradle"]
}
Enter fullscreen mode Exit fullscreen mode

nx graph

Now we are ready to run nx graph and see the connection between projects

Image description

Next step

You can now move projects to apps and libs folders and add project.json files so you can override executors.
You can also add linting files to the tools folder if you want to use checkstyle and pmd.

You can find code here for this article:
https://github.com/khalilou88/nx-compose-multiplatform

Top comments (0)