blob: c47749a1e9768c71a7367010743f82823648c559 [file] [log] [blame]
------
Usage
------
Karl Heinz Marbaise <khmarbaise@apache.org>
------
2017-09-01
~~ Copyright 2006 The Apache Software Foundation.
~~
~~ Licensed under the Apache License, Version 2.0 (the "License");
~~ you may not use this file except in compliance with the License.
~~ You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing, software
~~ distributed under the License is distributed on an "AS IS" BASIS,
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~ See the License for the specific language governing permissions and
~~ limitations under the License.
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
Usage
* Introduction
The Maven JMod plugin is used to create {{{http://openjdk.java.net/jeps/261}JMod Files}} in JDK 9.
* Configuration of the Maven JMod Plugin
To use the Maven JMod Plugin you have to configure it as an <<<extensions>>> which means
the configuration in your pom file has to look like this:
+-----
<project>
[...]
<build>
[...]
<plugins>
[...]
<plugin>
<artifactId>maven-jmod-plugin</artifactId>
<version>${project.version}</version>
<extensions>true</extensions>
<configuration>
<!-- configuration elements goes here -->
</configuration>
</plugin>
[...]
</project>
+-----
The configuration elements contains the configuration for the plugin
{{{https://maven.apache.org/guides/mini/guide-configuring-plugins.html}like any other Maven plugin}}.
The different elements which can be configured for this plugin can identified by the
{{{./plugin-info.html}goals documentation}}.
* Requirements
Based on the foundation of the plugin it is required to have JDK 9 installed. This means
either you have it configured via <<JAVA_HOME>> which means to run the whole
Maven build with JDK 9 or via <<Toolchains>>.
Howto configure Maven related to Toolchains can be read in the
{{{https://maven.apache.org/guides/mini/guide-using-toolchains.html}Toolchains documentation}}.
* Usage of the Maven JMod Plugin
JMod files can contain supplemental configuration files, native libraries,
legals notices, header files, man pages and native commands.
The JMod files are intended to be used in relationship with
{{{https://maven.apache.org/plugins/maven-jlink-plugin/}JLink}} to produce Java
Run Time Images.
An important thing to mention is that <<jmod>> files are not intended to be used
for run time and usual module relationships (You can't run a jvm via java using
jmod files). For such purposes <<jar>> files exists.
You can simply create a <<jmod>> file by defining the packaging <<jmod>> in your
pom file.
The <<first-mod>> project looks similar like this (apart from the above configuration):
+-----
<project ...>
<modelVersion>4.0.0</modelVersion>
[...]
<groupId>com.corporate.project</groupId>
<artifactId>first-mod</artifactId>
<verison>1.0-SNAPSHOT</version>
<packaging>jmod</packaging>
[...]
</project>
+-----
You can put supplemental configuration files, header files, native libraries,
man pages into the appropriate directories. Furthermore you can add java source
files etc. into this module and they will be compiled and later added to the resulting
jmod file.
An example source tree looks like this:
+----
src/
└── main
├── cmds
│   ├── first.cmd
│   ├── first.sh
│   └── test.sh
├── configs
│   ├── config.1
│   ├── config.2
│   └── sub-configuration
│   └── config.sub
├── headerfiles
│   └── first.h
├── java
│   ├── com
│   │   └── corporate
│   │   └── project
│   │   └── Main.java
│   └── module-info.java
├── legalnotices
│   └── first.md
├── libs
│   └── native-lib.so
└── manpages
└── the-page.man
+----
The above directories like <<cmds>>, <<configs>>, <<headerfiles>>, <<legalnotices>>, <<libs>>,
<<manpages>> are the default directories which are defined by the Maven JMod Plugin. If you
really need different directories to be used
{{{./create-mojo.html}you can of course configure this}} but we don't recommend
this. You should follow convention over configuration paradigm.
Finally if you like to create the <<jmod>> file this can be achieved by using
the following Maven call:
+----
mvn clean package
+----
There will be some output lines like this (This is configured using toolchains):
+----
[INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ first-jmod ---
[INFO] Toolchain in maven-surefire-plugin: JDK[/../jdk1.9.0_ea+181.jdk/Contents/Home]
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jmod-plugin:${project.version}:create (default-create) @ first-jmod ---
[INFO] Toolchain in maven-jmod-plugin: jmod [ /../jdk1.9.0_ea+181.jdk/Contents/Home/bin/jmod ]
[INFO]
+----
If you like to install the resulting <<jmod>> file you can of course use:
+----
mvn clean install
+----
or if you like to deploy the resulting artifacts to a remote repository you have to use:
+----
mvn clean deploy
+----
The <<jmod>> files will be really installed/deployed as <<jmod>> file with the according extension.