micronaut library standalone project

February 14th, 2023

Don't follow this if you can make a gradle submodule.

That is much simpler

 

This is for adding a local project as an instant dependency.

 

a) How to add micronaut library

inspired by

Modularizing with Micronaut Framework | kreuzwerker

but changing to import a local project instead of using lib/xxx.jar

 

 

b) How to add a local standalone gradle project

inspired by

java - Gradle Local Project Dependency - Stack Overflow

but change compile project("...") to implement project("...")

// parent settings.gradle

 

include ':GradleProjectLib'

project(':GradleProjectLib').projectDir = new File('../library')

 

// parent build.gradle

 

dependencies {

...

implement project(":GradleProjectLib")

...

}

 

// library build.gradle

plugins {

id 'java'

}

 

repositories {

mavenCentral()

}

 

dependencies {

//...

}

 

java {

sourceCompatibility = JavaVersion.toVersion("17")

targetCompatibility = JavaVersion.toVersion("17")

}

 

 

c) micronaut library instead of plain java library

inspired by

Micronaut Gradle plugin

// library gradle.properties

micronautVersion=3.6.1

// library build.gradle

plugins {

//    id("io.micronaut.library") version "3.5.1" // cannot have version specified

id("io.micronaut.library")

}

 

dependencies {

...

}

 

// parent src/main/java/.../Application.java

public class Application {

public static void main(String[] args) {

//        Micronaut.run(Application.class, args);

Micronaut.build(args)

.classes(Application.class, AnyClassInThePackageOfYourLibrary.class)

.start();

}

}

 

d) needed to split the tests and code for the library

  • Lib plugin cannot have version specified to be included in parent -> lib

  • Lib plugin must have version specified to run the tests -> lib-test

// library-test gradle.properties

micronautVersion=3.6.1

// library-test build.gradle

plugins {

id("io.micronaut.application") version "3.5.1" // must have version specified

}

 

dependencies {

//...

implementation project(":GradleProjectLib")

//...

}

 

application {

mainClass.set("<packages>.Application")

}

// library-test settings.gradle

 

include ':GradleProjectLib'

project(':GradleProjectLib').projectDir = new File('../library')

// library-test src/main/java/<packages>/Application.java

// needed to add a dummy micronaut entrypoint for the tests to run

 

public class Application {

public static void main(String[] args) {

Micronaut.run(Application.class, args);

}

}

// library-test src/main/resources/application.yml

// ...