Example example_jerrymouse
Part of the full Java 9 Jigsaw modules example suite.
|
Authors
Originally written by Martin Lehmann, Kristine Schaal and Rüdiger Grammes (cf. original repository). Migrated for Java Modules support documentation of Apache MavenTM in the course of the Maven Support & Care program by Gerd Aschemann (and other team members) as forked repository. Please add discussions, requirements, bugfixes, etc. to the fork instead of the original. |
What is this example about?
Example shows …
TODO
Loading Modules in Layers
Starter implements a primitive app server that loads modular applications from the subdirectory apps/ into their own layer under the boot layer and executes them via reflection.
For requirements on modular applications and details on storage, see apps/README.txt
-
Applications are stored under apps. Each application in its own directory "x". Directory name = application folder name
-
Configuration of the application via x/app.json
-
The application’s modules are located under x/mods/
e.g.
apps/example_requires_exports > app.json apps/example_requires_exports/mods > modb.jar > modc.jar > modmain.jar apps/example_hiddenmain > app.json apps/example_hiddenmain/mods > ...
-
app.json defines the root module as well as the main class and method to be started, e.g.:
{
"rootModule": "modmain",
"bootClass": "pkgmain.Main",
"bootMethod": "main"
}
Note: "bootMethod" must be static and have String[] as parameter!
END TODO
Output
This example uses golden master testing to ensure output consistency.
The expected output is compared with actual output using verify.sh.
Expected Output
[JerryMouse] Scanning for apps in apps
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_derived_private-package-protected] Initiating layer for application: example_derived_private-package-protected
[JerryMouse|example_derived_private-package-protected] Loading modules from apps/example_derived_private-package-protected
[JerryMouse|example_derived_private-package-protected] Loading app description from apps/example_derived_private-package-protected/app.json
[JerryMouse|example_derived_private-package-protected] Root module: modmain
[JerryMouse|example_derived_private-package-protected] Boot class: pkgmain.Main
[JerryMouse|example_derived_private-package-protected] Boot method: main
[JerryMouse|example_derived_private-package-protected] Created layer containing the following modules:
modb
modmain
[JerryMouse|example_derived_private-package-protected] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_requires_exports] Initiating layer for application: example_requires_exports
[JerryMouse|example_requires_exports] Loading modules from apps/example_requires_exports
[JerryMouse|example_requires_exports] Loading app description from apps/example_requires_exports/app.json
[JerryMouse|example_requires_exports] Root module: modmain
[JerryMouse|example_requires_exports] Boot class: pkgmain.Main
[JerryMouse|example_requires_exports] Boot method: main
[JerryMouse|example_requires_exports] Created layer containing the following modules:
modb
modc
modmain
[JerryMouse|example_requires_exports] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_requires_exports-to] Initiating layer for application: example_requires_exports-to
[JerryMouse|example_requires_exports-to] Loading modules from apps/example_requires_exports-to
[JerryMouse|example_requires_exports-to] Loading app description from apps/example_requires_exports-to/app.json
[JerryMouse|example_requires_exports-to] Root module: modmain
[JerryMouse|example_requires_exports-to] Boot class: pkgmain.Main
[JerryMouse|example_requires_exports-to] Boot method: main
[JerryMouse|example_requires_exports-to] Created layer containing the following modules:
modb1
modb2
modc
modmain
[JerryMouse|example_requires_exports-to] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse] All apps completed. Shutting down.
Actual Output
[JerryMouse] Scanning for apps in apps
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_derived_private-package-protected] Initiating layer for application: example_derived_private-package-protected
[JerryMouse|example_derived_private-package-protected] Loading modules from apps/example_derived_private-package-protected
[JerryMouse|example_derived_private-package-protected] Loading app description from apps/example_derived_private-package-protected/app.json
[JerryMouse|example_derived_private-package-protected] Root module: modmain
[JerryMouse|example_derived_private-package-protected] Boot class: pkgmain.Main
[JerryMouse|example_derived_private-package-protected] Boot method: main
[JerryMouse|example_derived_private-package-protected] Created layer containing the following modules:
modb
modmain
[JerryMouse|example_derived_private-package-protected] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_requires_exports] Initiating layer for application: example_requires_exports
[JerryMouse|example_requires_exports] Loading modules from apps/example_requires_exports
[JerryMouse|example_requires_exports] Loading app description from apps/example_requires_exports/app.json
[JerryMouse|example_requires_exports] Root module: modmain
[JerryMouse|example_requires_exports] Boot class: pkgmain.Main
[JerryMouse|example_requires_exports] Boot method: main
[JerryMouse|example_requires_exports] Created layer containing the following modules:
modb
modc
modmain
[JerryMouse|example_requires_exports] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_requires_exports-to] Initiating layer for application: example_requires_exports-to
[JerryMouse|example_requires_exports-to] Loading modules from apps/example_requires_exports-to
[JerryMouse|example_requires_exports-to] Loading app description from apps/example_requires_exports-to/app.json
[JerryMouse|example_requires_exports-to] Root module: modmain
[JerryMouse|example_requires_exports-to] Boot class: pkgmain.Main
[JerryMouse|example_requires_exports-to] Boot method: main
[JerryMouse|example_requires_exports-to] Created layer containing the following modules:
modb1
modb2
modc
modmain
[JerryMouse|example_requires_exports-to] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse] All apps completed. Shutting down.
Maven 4 Output
[JerryMouse] Scanning for apps in apps
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_derived_private-package-protected] Initiating layer for application: example_derived_private-package-protected
[JerryMouse|example_derived_private-package-protected] Loading modules from apps/example_derived_private-package-protected
[JerryMouse|example_derived_private-package-protected] Loading app description from apps/example_derived_private-package-protected/app.json
[JerryMouse|example_derived_private-package-protected] Root module: modmain
[JerryMouse|example_derived_private-package-protected] Boot class: pkgmain.Main
[JerryMouse|example_derived_private-package-protected] Boot method: main
[JerryMouse|example_derived_private-package-protected] Created layer containing the following modules:
modb
modmain
[JerryMouse|example_derived_private-package-protected] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_requires_exports] Initiating layer for application: example_requires_exports
[JerryMouse|example_requires_exports] Loading modules from apps/example_requires_exports
[JerryMouse|example_requires_exports] Loading app description from apps/example_requires_exports/app.json
[JerryMouse|example_requires_exports] Root module: modmain
[JerryMouse|example_requires_exports] Boot class: pkgmain.Main
[JerryMouse|example_requires_exports] Boot method: main
[JerryMouse|example_requires_exports] Created layer containing the following modules:
modb
modc
modmain
[JerryMouse|example_requires_exports] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse|example_requires_exports-to] Initiating layer for application: example_requires_exports-to
[JerryMouse|example_requires_exports-to] Loading modules from apps/example_requires_exports-to
[JerryMouse|example_requires_exports-to] Loading app description from apps/example_requires_exports-to/app.json
[JerryMouse|example_requires_exports-to] Root module: modmain
[JerryMouse|example_requires_exports-to] Boot class: pkgmain.Main
[JerryMouse|example_requires_exports-to] Boot method: main
[JerryMouse|example_requires_exports-to] Created layer containing the following modules:
modb1
modb2
modc
modmain
[JerryMouse|example_requires_exports-to] Calling boot method (modmain/pkgmain.Main.main) in foreground
--------------------------------------------------------------------------------------------------------------------
[JerryMouse] All apps completed. Shutting down.
Maven 4 Migration
The example_jerrymouse has been migrated to Maven 4 with the following approach.
Key Changes
- Dependency Management
-
The
javax.jsonautomatic module dependency is managed via Maven.-
Added
org.glassfish:javax.json:1.0.4as Maven dependency -
Configured
maven-dependency-pluginto copy the JAR toamlib/directory -
Configured
maven-compiler-pluginto includeamlib/on the module-path during compilation
-
- Source Code Sharing
-
Uses symbolic links to share source code with the original example.
-
m4/src/modstarter/main/java→../../../../src/modstarter
-
- Application Loading
-
Created
m4/apps_copyallexamples2appdir.shscript.-
Copies Maven 4 versions of example applications from whitelisted examples
-
Builds M4 versions of dependencies if they don’t exist yet
-
Sources from
../example_*/m4/target/(JARs created by maven-jar-plugin) -
Creates
app.jsondescriptors for each application
-
- Runtime Configuration
-
The
m4/run.shscript runs the JerryMouse app server.-
Calls
apps_copyallexamples2appdir.shto prepare application JARs -
Runs with correct module-path including
amlib/ -
Dynamically loads and executes applications in separate module layers
-