blob: 03792860790a2db90a90fc3f06cafc69f39cee3c [file] [log] [blame] [view]
# Tools
Minho provides several tools in order for you to easily create your runtime.
Basically, Minho tools can use `minho-build.json` file describing the runtime.
Then, you can create different forms (distributions) for your runtime:
* `package` creates a directory containing all required resources for the runtime (exploded form). Then, you go in this directory and just launch the runtime with `java -jar minho-boot-xx.jar`
* `jar` creates an uber jar packaging runtime resources in one archive. Then, you launch the runtime with `java -jar myruntime.jar`
* `archive` creates a zip archive containing runtime resources and startup script. After extracting this archive, you can launch the runtime with `./bin/minho.sh`
You have different options to create the runtime.
## `minho-build.json` file
All Minho tools are using a runtime descriptor: `minho-build.json`.
This file describe:
* `name` of the runtime
* `properties` used to specify extra information to build the runtime
* `dependencies` is the modules (libraries) to be included in the runtime (using `file`, `http`, `mvn` URL)
Here's an example of `minho-build.json` file:
```json
{
"name": "my-runtime",
"properties": {
"include.transitive": "true"
},
"dependencies": [
"minho:minho-boot",
"mvn:commons-lang/commons-lang/2.6"
]
}
```
_NB: `minho-build.json` can be written by hand or can be generated by the `minho-maven-plugin` for instance._
## CLI
`minho-build` is a command line to create the runtime based on `minho-build.json` descriptor.
### Installation
`minho-build` CLI is packaged as an archive (tar.gz or zip).
Extract the archive in the folder of your choice:
```bash
$ tar zxvf minho-build-1.0-SNAPSHOT.tar.gz
```
or
```bash
$ unzip minho-build-1.0-SNAPSHOT.zip
```
It's recommended (for convenience) to add CLI `bin` folder in your `PATH` (`export PATH=/path/to/minho-build/bin:$PATH`).
You can display `minho-build` help with the `--help` argument:
```bash
$ mino-build --help
usage: minho-build [package|jar|archive]
Default build action is package
-f,--file <arg> Location of the minho-build.json file
-h,--help print this message
```
### Use
By default, `minho-build` is looking for a `minho-build.json` in the current directory. You can specify the location of the `minho-build.json` file with the `-f` (`--file`) option.
`minho-build.json` describes your runtime:
* `name` is the runtime name (required), also used to generate the runtime output directory
* `version` is optional, and allows you to specify runtime version (it can be used to easily create docker tag for instance)
* `properties` are used to specify build behaviors (see later for details)
* `dependencies` is the list of all artifacts that should be included in your runtime
Here's a minimal example of `minho-build.json`:
```json
{
"name": "my-runtime",
"dependencies": [
"minho:minho-boot",
"minho:minho-banner"
]
}
```
Once you have the `minho-build.json` file, you have three options (arguments) to create your runtime distribution:
* `package` (default) creates a folder with all runtime dependencies (exploded mode):
```bash
$ minho-build package
Oct 18, 2022 8:47:01 AM org.apache.karaf.minho.tooling.common.Runtime <init>
INFO: Creating Minho runtime package in folder my-runtime
```
Then, you can launch the runtime with `java -jar minho-boot-1.0-SNAPSHOT.jar` in the runtime folder:
```bash
$ java -jar my-runtime/minho-boot-1.0-SNAPSHOT.jar
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.boot.Main main
INFO: Starting runtime in exploded mode
Minho lib: /home/jbonofre/Workspace/karaf5/tooling/cli/target/minho-build-1.0-SNAPSHOT/bin
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding config-service service (-2147483647)
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding lifecycle-service service (-1000)
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding classloader-service service (-1000)
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding minho-banner-service service (2147483647)
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.banner.WelcomeBannerService onRegister
INFO:
__ __ _ _
| \/ (_)_ __ | |__ ___
| |\/| | | '_ \| '_ \ / _ \
| | | | | | | | | | | (_) |
|_| |_|_|_| |_|_| |_|\___/
Apache Karaf Minho 1.x
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.boot.service.ServiceRegistry lambda$start$2
INFO: Starting services
Oct 18, 2022 8:48:45 AM org.apache.karaf.minho.boot.service.LifeCycleService start
INFO: Starting lifecycle service
```
* `jar` created an uber jar packaging the whole runtime:
```bash
$ minho-build jar
Oct 18, 2022 8:52:13 AM org.apache.karaf.minho.tooling.common.Runtime <init>
INFO: Creating Minho runtime package in folder my-runtime
Oct 18, 2022 8:52:14 AM org.apache.karaf.minho.tooling.common.Runtime createJar
INFO: Creating Minho runtime uber jar
Oct 18, 2022 8:52:14 AM org.apache.karaf.minho.tooling.common.Runtime lambda$createJar$2
INFO: services META-INF/services/org.apache.karaf.minho.boot.spi.Service
Oct 18, 2022 8:52:14 AM org.apache.karaf.minho.tooling.common.Runtime lambda$createJar$2
INFO: services META-INF/services/org.apache.karaf.minho.boot.spi.Service
Oct 18, 2022 8:52:14 AM org.apache.karaf.minho.tooling.common.Runtime lambda$createJar$3
INFO: Adding jar entry /tmp/temp_my-runtime14876578769792859300/exploded/org
Oct 18, 2022 8:52:14 AM org.apache.karaf.minho.tooling.common.Runtime lambda$createJar$3
INFO: Adding jar entry /tmp/temp_my-runtime14876578769792859300/exploded/META-INF
Oct 18, 2022 8:52:14 AM org.apache.karaf.minho.tooling.common.Runtime lambda$addJarContent$4
WARNING: Can't add jar content duplicate entry: META-INF/MANIFEST.MF
```
You now have `my-runtime.jar` in `my-runtime` folder. You can copy this jar wherever you want (including another machine), and you can launch directly the runtime using this uber jar e.g. `java -jar my-runtime.jar`:
```bash
$ java -jar my-runtime.jar
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.boot.Main main
INFO: Starting runtime in exploded mode
Minho lib: /home/jbonofre/Workspace/karaf5/tooling/cli/target/minho-build-1.0-SNAPSHOT/bin
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding config-service service (-2147483647)
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding lifecycle-service service (-1000)
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding classloader-service service (-1000)
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding minho-banner-service service (2147483647)
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.banner.WelcomeBannerService onRegister
INFO:
__ __ _ _
| \/ (_)_ __ | |__ ___
| |\/| | | '_ \| '_ \ / _ \
| | | | | | | | | | | (_) |
|_| |_|_|_| |_|_| |_|\___/
Apache Karaf Minho 1.x
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.boot.service.ServiceRegistry lambda$start$2
INFO: Starting services
Oct 18, 2022 8:53:57 AM org.apache.karaf.minho.boot.service.LifeCycleService start
INFO: Starting lifecycle service
```
* `archive` created a zip file containing the runtime, including a startup script:
```bash
$ minho-build archive
Oct 18, 2022 8:56:01 AM org.apache.karaf.minho.tooling.common.Runtime <init>
INFO: Creating Minho runtime package in folder my-runtime
Oct 18, 2022 8:56:02 AM org.apache.karaf.minho.tooling.common.Runtime createArchive
INFO: Creating Minho runtime archive
```
You now have `my-archive.zip` in the `my-archive` folder. You can move this zip file wherever you want (including other machines) and extract in the directory of your choice:
```bash
$ unzip my-runtime.zip
Archive: my-runtime.zip
inflating: minho-boot-1.0-SNAPSHOT.jar
creating: bin/
inflating: bin/minho.sh
inflating: minho-banner-1.0-SNAPSHOT.jar
```
Then you can launch the runtime using `bin/minsho.sh` script:
```bash
$ cd bin
$ sh minho.sh
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.boot.Main main
INFO: Starting runtime in exploded mode
Minho lib: /home/jbonofre/Workspace/karaf5/tooling/cli/target/minho-build-1.0-SNAPSHOT/bin/temp
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding config-service service (-2147483647)
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding lifecycle-service service (-1000)
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding classloader-service service (-1000)
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.boot.service.ServiceRegistry add
INFO: Adding minho-banner-service service (2147483647)
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.banner.WelcomeBannerService onRegister
INFO:
__ __ _ _
| \/ (_)_ __ | |__ ___
| |\/| | | '_ \| '_ \ / _ \
| | | | | | | | | | | (_) |
|_| |_|_|_| |_|_| |_|\___/
Apache Karaf Minho 1.x
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.boot.service.ServiceRegistry lambda$start$2
INFO: Starting services
Oct 18, 2022 8:58:40 AM org.apache.karaf.minho.boot.service.LifeCycleService start
INFO: Starting lifecycle service
```
## Apache Maven plugin
If you plan to build the runtime using [Apache Maven](https://maven.apache.org), Minho provides a Maven plugin.
You can add `minho-maven-plugin` in your `pom.xml`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group.id</groupId>
<artifactId>my-runtime</artifactId>
<version>1.0-SNAPSHOT</version>
<name>My Minho Runtime</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.karaf.minho.tooling</groupId>
<artifactId>minho-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>package</id>
<goals>
<goal>package</goal>
</goals>
<configuration>
<minhoBuild>${project.basedir}/src/main/resources/minho-build.json</minhoBuild>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
```
You can now build your runtime with `mvn clean install`:
```bash
$ mvn clean install
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-runtime ---
[INFO] Building jar: /home/jbonofre/Workspace/karaf5/tooling/cli/target/test/target/my-runtime-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- minho-maven-plugin:1.0-SNAPSHOT:package (package) @ my-runtime ---
Downloading from apache.snapshots: https://repository.apache.org/snapshots/org/apache/karaf/minho/tooling/common/1.0-SNAPSHOT/maven-metadata.xml
Downloading from apache.snapshots: https://repository.apache.org/snapshots/org/apache/karaf/minho/minho-boot/1.0-SNAPSHOT/maven-metadata.xml
[INFO] Creating Minho runtime package
Oct 18, 2022 1:56:28 PM org.apache.karaf.minho.tooling.common.Runtime <init>
INFO: Creating Minho runtime package in folder my-runtime
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ my-runtime ---
[INFO] Installing /home/jbonofre/Workspace/karaf5/tooling/cli/target/test/target/my-runtime-1.0-SNAPSHOT.jar to /home/jbonofre/.m2/repository/my/group/id/my-runtime/1.0-SNAPSHOT/my-runtime-1.0-SNAPSHOT.jar
[INFO] Installing /home/jbonofre/Workspace/karaf5/tooling/cli/target/test/pom.xml to /home/jbonofre/.m2/repository/my/group/id/my-runtime/1.0-SNAPSHOT/my-runtime-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.554 s
[INFO] Finished at: 2022-10-18T13:56:28+02:00
[INFO] ------------------------------------------------------------------------
```
You now have `my-runtime` directory created in your project.
The `minho-maven-plugin` `goal` defines the build action: `package`, `jar`, `archive`.
## Gradle
**Coming soon!**
## REST
**Coming soon!**
## Minho Creator
**Coming soon!**