keystone

Keystone project is a bootstrap that loads your application and its dependencies from a single archive. With his maven plugin and few line of configuration, your application will be available with all his dependencies in a single archive. The four main ideas which make the difference with other solution are: 1. all dependencies are not exploded in final archive, 'jar' file stay without any modification, so manifest also... 2. use our maven plugin to package all that you need (and we'll loading dependencies automatically for you) 3. you could load native library 4. you could restart your application Why named Keystone? 1. Stone wedge-shaped arch which maintains a vault [Architecture]. 2. A central element on which everything depends.

License

License

Categories

Categories

KeY Data Data Formats Formal Verification
GroupId

GroupId

org.intelligents-ia
ArtifactId

ArtifactId

keystone
Last Version

Last Version

3.3
Release Date

Release Date

Type

Type

pom
Description

Description

keystone
Keystone project is a bootstrap that loads your application and its dependencies from a single archive. With his maven plugin and few line of configuration, your application will be available with all his dependencies in a single archive. The four main ideas which make the difference with other solution are: 1. all dependencies are not exploded in final archive, 'jar' file stay without any modification, so manifest also... 2. use our maven plugin to package all that you need (and we'll loading dependencies automatically for you) 3. you could load native library 4. you could restart your application Why named Keystone? 1. Stone wedge-shaped arch which maintains a vault [Architecture]. 2. A central element on which everything depends.
Project URL

Project URL

https://github.com/geronimo-iia/keystone
Project Organization

Project Organization

Intelligents-ia
Source Code Management

Source Code Management

https://github.com/geronimo-iia/keystone.git

Download keystone

Filename Size
keystone-3.3.pom 14 KB
Browse

How to add to project

<!-- https://jarcasting.com/artifacts/org.intelligents-ia/keystone/ -->
<dependency>
    <groupId>org.intelligents-ia</groupId>
    <artifactId>keystone</artifactId>
    <version>3.3</version>
    <type>pom</type>
</dependency>
// https://jarcasting.com/artifacts/org.intelligents-ia/keystone/
implementation 'org.intelligents-ia:keystone:3.3'
// https://jarcasting.com/artifacts/org.intelligents-ia/keystone/
implementation ("org.intelligents-ia:keystone:3.3")
'org.intelligents-ia:keystone:pom:3.3'
<dependency org="org.intelligents-ia" name="keystone" rev="3.3">
  <artifact name="keystone" type="pom" />
</dependency>
@Grapes(
@Grab(group='org.intelligents-ia', module='keystone', version='3.3')
)
libraryDependencies += "org.intelligents-ia" % "keystone" % "3.3"
[org.intelligents-ia/keystone "3.3"]

Dependencies

test (1)

Group / Artifact Type Version
junit : junit jar 4.10

Project Modules

  • keystone-boot
  • keystone-plugin
  • keystone-samples

KEYSTONE : Bootstrap your java application

Keystone project is a bootstrap that loads your application and its dependencies from a single archive.
With his maven plugin and few line of configuration, your application will be available with all his dependencies in a single archive.

The four main ideas which make the difference with other solution are:

  • all dependencies are not exploded in final archive, 'jar' file stay without anny modification, so manifest also...
  • user our maven plugin to package all that you need (and we'll loading dependencies automatically for you)
  • you could load native library
  • you could restart your application

So, you will be able to run it as this:

java -jar myapp.jar

This project was born after some code on another project named 'winstone'. Class loading and dependencies packaging can be a nightmare when you did more than just a war file to deploy (war can be very difficult also, .. I known ...)

This project is now used for many application, like:

  • distribution of tool (database managment, batch processing)
  • installation tool with gui
  • web server (winstone)
  • little games

So it's time to start

Configure your project

<build>
    <plugins>
        <plugin>
            <groupId>org.intelligents-ia</groupId>
            <artifactId>keystone-plugin</artifactId>
            <version>3.4</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <configuration>
                        <mainClass>your.class.Main</mainClass>
                    </configuration>
                    <goals>
                        <goal>custom</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

The single archive will be builded with your maven dependencies and main class is 'your.class.Main'.

Keystone Maven Plugin Parameters

  • mainClass: your class ‘Main’ which implements:
    public static void main(String[] args)
  • cleanUpLib: true | false (default true),
    clean up folder named “lib” at startup before extraction of initial archive
  • cleanUpBeforeShutdown: true | false (default is false),
    clean up folder named “lib” at shutdown
  • info: true | false (default is false),
    level ‘INFO’ logs generated by the Keystone bootsrap
  • verbose: true | false (default is false),
    level ‘VERBOSE’ logs generated by the Keystone bootsrap
  • logFile: Log file path.
    Per default, all logs go on standard output.
  • minimalJvmVersion: minimal JVM specification version required.
  • explodeDirectory: Root extracting archives embark with the bootstrap.
    By default, this directory is the current directory if write operations are allowed on it, otherwise it is a temporary folder that is used.
  • finalName: Final artifact name.
    By default, this is the name of the original artefact suffix “-boot”. Example for “sample.jar”, it will be “sample-boot.jar”
  • includedScope: regular expression, specify which dependencies scope will be included. By default, only 'test' scope are excluded.
  • natives: add a list of native libraries.
  • libraries: add a list of extra java libraries. Each path can be a file or a directory (Not recursive).

Each path can be a file or a directory (Not recursive).

<natives>
	<paths>
		<path>${basedir}/extra/timer.dll</path>
		<path>${basedir}/extra/timer.so</path>
		<path>${basedir}/extra-natives</path>
	</paths>
</natives>


<libraries>
	<paths>
		<path>${basedir}/h2-driver.jar</path>
		<path>${basedir}/drivers</path>
	</paths>
</libraries>

Native libraries are supported in both way

  • with plugin parameters
  • within embedded jar

Use extra features: Restart your application when needed!

  1. add a new dependency on your project
  2. When you want to restart, simply throw this exception

In your pom:

<dependency>
	<groupId>org.intelligents-ia</groupId>
	<artifactId>keystone-boot</artifactId>
	<version>3.4</version>
</dependency>

In your code:

throw new KeystoneException(KeystoneException.Operation.RESTART);

Releases Notes

3.5 Snapshot

TODO:

  • remove deprecated maven plugin api

3.4

  • support JDK 8
  • update maven plugin (using 3.x api and keep 2.x compatibility)
  • remove useless parameter "includeJavaHomeLib": always add to classpath application, archives from the JAVA_HOME / lib if it exists
  • remove useless parameter "replaceProjectArtifact": archive packaged artifact should never replaces the current project
  • remove useless parameter "includeSystemClassLoader": system classloader is parent of application classloader.
  • fix exception handling of embedded application

3.3

  • add properties "BootStrap.restarted" when system is restarted
  • fix exception handling
  • update pom for release keystone in central maven repository
  • change group id from org.intelligents-ia.keystone to org.intelligents-ia

3.2

  • configure dependencies scope with maven plugin, parameter 'includedScope'. By default, only 'test' scope is excluded (since 3.1).
  • add optional parameter 'minimalJvmVersion' to check minimal jvm version on start
  • update deprecated logback configuration
  • update deprecated maven properties declaration
  • update parent pom (1.4.7, to use new distribution management configuration)

3.1

  • exclude only “test” scope artifacts
  • add native support
    • be able to load embedded native library file
    • be able to load native library in classpath at runtime
  • add plugin configuration utilities:
    • add a path set of native libraries
    • add a path set of extra java libraries

3.0

  • Integrate super pom 1.4.4 and add git.properties
  • Integrate keystone sample in this project
  • use org.intelligents-ia:intelligents-ia as super pom
  • extract all keystone-kernel and extras in another project:
    • keystone project focus on bootstrap application, maven integration, restart features and pattern to update embedded java application at runtime
    • keystone-kernel focus on micro kernel container (yes, i like playing…)

2.6.0

  • Bootstrap: add stack trace when exception occurs
  • Use Jackson libraries from github: com.fasterxml.jackson
  • Fix header of license
  • Add copy constructor on Version (keystone api)

Versions

Version
3.3