Java Archive
Creates an archive for a Java Binary distribution.
Configuration
Legend:
-
required
-
optional
-
may use environment variable
-
accepts Name Templates
#
assemble:
#
javaArchive:
# Assemblers require a name.
#
app:
# Enables or disables the assembler.
# Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
#
active: ALWAYS
# Export the assembled artifacts as a matching named distribution.
# Defaults to `true`.
#
exported: true
# The stereotype of this assembler.
# Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
# Defaults to `#{project.stereotype}`.
#
stereotype: CLI
# Additional properties used when evaluating templates.
#
extraProperties:
# Key will be capitalized and prefixed with `javaArchive`, i.e, `javaArchiveFoo`.
foo: bar
# Name of the archive.
# If left undefined, will use {{distributionName}}-{{projectVersion}}.
#
archiveName: 'app-{{projectVersion}}'
#
executable:
# Name of the executable launcher.
# If left undefined, will use `#{distribution.name}`.
#
name: app
# Executable extension on Linux/MacOS.
# If left undefined, value will be left empty.
#
unixExtension: sh
# Executable extension on Windows.
# If left undefined, will use `bat`.
#
windowsExtension: cmd
# Set of archive formats to use.
# Supported values are [`ZIP`, `TAR`, `TAR_BZ2`, `TAR_GZ`, `TAR_XZ`, `TAR_ZST`, `TBZ2`, `TGZ`, `TXZ`].
#
formats:
- ZIP
- TGZ
#
options:
# Timestamp to use for each entry.
# Must follow ISO-8601 +HH:MM timezone offset.
# Example: 2023-03-08T12:56:33.024578+01:00
# Defaults to timestamp for latest git commit or current time.
#
timestamp: '2020-01-01T00:00:00.000000+00:00'
# Set longFileMode for tar archives.
# Possible values are [`ERROR`, `GNU`, `POSIX`, `TRUNCATE`].
# Defaults to `ERROR`.
#
longFileMode: POSIX
# Set bigNumberMode for tar archives.
# Possible values are [`ERROR`, `GNU`, `POSIX`].
# Defaults to `ERROR`.
#
bigNumberMode: POSIX
# The executable JAR that contains the application.
#
mainJar:
path: path/to/app.jar
# Defines a list of additional JARs as globs.
#
jars:
# The pattern to use.
# May use glob or regex pattern syntax.
#
- pattern: path/to/**/*.jar
#
java:
# Name of main module (if any).
# Define only if the application is modular.
#
mainModule: com.acme.demo
# The application's entry point.
# If left undefined, will use `#{project.java.mainClass}`.
#
mainClass: com.acme.Main
# Options to pass to the Java runtime
#
jvmOptions:
# Included in all scripts
#
universal:
- -Dprop=value
# Included in all non Windows scripts
#
unix:
- -Dprop=value
# Included in all non Windows (except OSX) scripts
#
linux:
- -Dprop=value
# Included only in OSX scripts
#
osx:
- -Dprop=value
# Included in Windows scripts
#
windows:
- -Dprop=value
# Environment variables used in launch scripts.
#
environmentVariables:
# Included in all scripts
#
universal:
KEY: value
# Included in all non Windows scripts
#
unix:
KEY: value
# Included in all non Windows (except OSX) scripts
#
linux:
KEY: value
# Included only in OSX scripts
#
osx:
KEY: value
# Included in Windows scripts
#
windows:
KEY: value
# Directory with file templates used to prepare the assembler.
# Defaults to `src/jreleaser/assemblers/#{distribution.name}/javaArchive`.
# If specified, path must exist.
#
templateDirectory: path/to/javaArchive/templates
# List of template files to be skipped.
# Value may be an exact match or a regex.
#
skipTemplates:
- README.md.tpl
# Defines a list of additional files as artifacts.
# These files will be added to the assembled archive.
#
artifacts:
- path: path/to/file
- path: path/to/another_file
transform: path/inside/archive
- path: path/to/platform/specific/file
platform: osx-x86_64
# Defines a list of additional files as globs.
# These files will be added to the assembled archive.
#
files:
# The pattern to use.
# May use glob or regex pattern syntax.
#
- pattern: path/to/**/*.txt
#
fileSets:
# The input directory to copy files from.
#
- input: path/to/input/directory
# The target path inside the archive.
# If left undefined, defaults to the root of the archive.
#
output: path/to/archive/entry
# Fail if the given `input` does not exist.
# Defaults to `true`.
#
failOnMissingInput: false
# A set of files and directory to include.
#
includes:
- 'name_or_regex'
# A set of files and directory to exclude.
#
excludes:
- 'name_or_regex'
# Additional properties used when evaluating templates.
#
extraProperties:
# Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
foo: bar
#
swid:
# Tags require a name.
#
mytag:
# Enables or disables the tag.
# Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
#
active: ALWAYS
# Reference to a common tag.
#
tagRef: swid-tag
# Path where the tag file will be placed.
# Defaults to `SWIDTAG`.
#
path: SWID
# A globally unique identifier and should be assigned a GUID reference.
# Defaults to a UUID generated with `groupId`, `artifactId`, `version`, `vendor`.
#
tagId: c526ec37-2715-328e-8bbc-4eb5a9f47c98
# Indicates if a specific release of a software product has more than one tag that can represent that specific release.
# Defaults to `1`.
#
tagVersion: 2
# Language used in the tag document.
# Defaults to `en-US`.
#
lang: de
# If this SWID tag is a collection of information that describes the pre-installation data of software component.
# Defaults to `false`.
#
corpus: true
# If this SWID tag describes a product patch or modification to a different software element.
# Defaults to `false`.
#
patch: false
# List of organizations related to the software component referenced by this SWID tag.
#
entities:
# name of the organization claiming a particular role in the SWID tag.
#
- name: Acme
# URI of the claiming organization.
# Defaults to `http://invalid.unavailable`.
#
regid: https://acme.com
# The relationship between this organization and this tag e.g. tag, `softwareCreator`, `licensor`, `tagCreator`, etc.
# The role of `tagCreator` is required for every SWID tag. May include any role value, but the pre-defined roles
# include: `aggregator`, `distributor`, `licensor`, `softwareCreator`, `tagCreator`.
# Other roles will be defined as the market uses the SWID tags.
# Defaults to [`tagCreator`, `softwareCreator`].
#
roles:
- tagCreator
- softwareCreator
# Assemblers require a name.
#
[assemble.javaArchive.app]
# Enables or disables the assembler.
# Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
#
active = "ALWAYS"
# Export the assembled artifacts as a matching named distribution.
# Defaults to `true`.
#
exported = true
# The stereotype of this assembler.
# Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
# Defaults to `#{project.stereotype}`.
#
stereotype = "CLI"
# Additional properties used when evaluating templates.
#
extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `javaArchive`, i.e, `javaArchiveFoo`.
# Name of the archive.
# If left undefined, will use {{distributionName}}-{{projectVersion}}.
#
archiveName = "app-{{projectVersion}}"
#
[assemble.javaArchive.app.executable]
# Name of the executable launcher.
# If left undefined, will use `#{distribution.name}`.
#
name = "app"
# Executable extension on Linux/MacOS.
# If left undefined, value will be left empty.
#
unixExtension = "sh"
# Executable extension on Windows.
# If left undefined, will use `bat`.
#
windowsExtension = "cmd"
# Set of archive formats to use.
# Supported values are [`ZIP`, `TAR`, `TAR_BZ2`, `TAR_GZ`, `TAR_XZ`, `TAR_ZST`, `TBZ2`, `TGZ`, `TXZ`].
#
formats = [ "ZIP", "TGZ"]
# Timestamp to use for each entry.
# Must follow ISO-8601 +HH:MM timezone offset.
# Example: 2023-03-08T12:56:33.024578+01:00
# Defaults to timestamp for latest git commit or current time.
#
options.timestamp = "2020-01-01T00:00:00.000000+00:00"
# Set longFileMode for tar archives.
# Possible values are [`ERROR`, `GNU`, `POSIX`, `TRUNCATE`].
# Defaults to `ERROR`.
#
options.longFileMode = "POSIX"
# Set bigNumberMode for tar archives.
# Possible values are [`ERROR`, `GNU`, `POSIX`].
# Defaults to `ERROR`.
#
options.bigNumberMode = "POSIX"
# The executable JAR that contains the application.
#
mainJar = { path = "path/to/app.jar" }
# Defines a list of additional JARs as globs.
#
[[assemble.jlink.app.jars]]
# The pattern to use.
# May use glob or regex pattern syntax.
#
pattern = "path/to/**/*.jar"
# Name of main module (if any).
# Define only if the application is modular.
#
java.mainModule = "com.acme.demo"
# The application's entry point.
# If left undefined, will use `#{project.java.mainClass}`.
#
java.mainClass = "com.acme.Main"
# Options to pass to the Java runtime
# Included in all scripts
#
java.jvmOptions.universal = ["-Dprop=value"]
# Included in all non Windows scripts
#
java.jvmOptions.unix = ["-Dprop=value"]
# Included in all non Windows (except OSX) scripts
#
java.jvmOptions.linux = ["-Dprop=value"]
# Included only in OSX scripts
#
java.jvmOptions.osx = ["-Dprop=value"]
# Included in Windows scripts
#
java.jvmOptions.windows = ["-Dprop=value"]
# Environment variables used in launch scripts.
# Included in all scripts
#
java.environmentVariables.universal.KEY = "value"
# Included in all non Windows scripts
#
java.environmentVariables.unix.KEY = "value"
# Included in all non Windows (except OSX) scripts
#
java.environmentVariables.linux.KEY = "value"
# Included only in OSX scripts
#
java.environmentVariables.osx.KEY = "value"
# Included in Windows scripts
#
java.environmentVariables.windows.KEY = "value"
# Directory with file templates used to prepare the assembler.
# Defaults to `src/jreleaser/assemblers/#{distribution.name}/javaArchive`.
# If specified, path must exist.
#
templateDirectory = "path/to/javaArchive/templates"
# List of template files to be skipped.
# Value may be an exact match or a regex.
#
skipTemplates = [ "README.md.tpl" ]
# Defines a list of additional files as artifacts.
# These files will be added to the assembled archive.
#
[[assemble.javaArchive.app.artifacts]]
path = "path/to/file"
[[assemble.javaArchive.app.artifacts]]
path = "path/to/another_file"
transform = "path/inside/archive"
[[assemble.javaArchive.app.artifacts]]
path = "path/to/platform/specific/file"
platform = "osx-x86_64"
# Defines a list of additional files as globs.
# These files will be added to the assembled archive.
#
[[assemble.javaArchive.app.files]]
# The pattern to use.
# May use glob or regex pattern syntax.
#
pattern = "path/to/**/*.txt"
#
[[assemble.javaArchive.app.fileSets]]
# The input directory to copy files from.
#
input = "path/to/input/directory"
# The target path inside the archive.
# If left undefined, defaults to the root of the archive.
#
output = "path/to/archive/entry"
# Fail if the given `input` does not exist.
# Defaults to `true`.
#
failOnMissingInput = false
# A set of files and directory to include.
#
includes = ["name_or_regex"]
# A set of files and directory to exclude.
#
excludes = ["name_or_regex"]
# Additional properties used when evaluating templates.
#
[[assemble.javaArchive.app.fileSets.extraProperties]]
# Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
foo: bar
#
[assemble.javaArchive.app.swid]
# Enables or disables the tag.
# Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
#
active = "ALWAYS"
# Reference to a common tag.
#
tagRef = "swid-tag"
# Path where the tag file will be placed.
# Defaults to `SWIDTAG`.
#
path = "SWID"
# A globally unique identifier and should be assigned a GUID reference.
# Defaults to a UUID generated with `groupId`, `artifactId`, `version`, `vendor`.
#
tagId = "c526ec37-2715-328e-8bbc-4eb5a9f47c98"
# Indicates if a specific release of a software product has more than one tag that can represent that specific release.
# Defaults to `1`.
#
tagVersion = 2
# Language used in the tag document.
# Defaults to `en-US`.
#
lang = "de"
# If this SWID tag is a collection of information that describes the pre-installation data of software component.
# Defaults to `false`.
#
corpus = true
# If this SWID tag describes a product patch or modification to a different software element.
# Defaults to `false`.
#
patch = false
# List of organizations related to the software component referenced by this SWID tag.
#
[[assemble.javaArchive.app.swid.entities]]
# name of the organization claiming a particular role in the SWID tag.
#
name = "Acme"
# URI of the claiming organization.
# Defaults to `http://invalid.unavailable`.
#
regid = "https://acme.com"
# The relationship between this organization and this tag e.g. tag, `softwareCreator`, `licensor`, `tagCreator`, etc.
# The role of `tagCreator` is required for every SWID tag. May include any role value, but the pre-defined roles
# include: `aggregator`, `distributor`, `licensor`, `softwareCreator`, `tagCreator`.
# Other roles will be defined as the market uses the SWID tags.
# Defaults to [`tagCreator`, `softwareCreator`].
#
roles = ["tagCreator", "softwareCreator"]
{
//
"assemble": {
//
"javaArchive": {
// Assemblers require a name.
//
"app": {
// Enables or disables the assembler.
// Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
//
"active": "ALWAYS",
// Export the assembled artifacts as a matching named distribution.
// Defaults to `true`.
//
"exported": true,
// The stereotype of this assembler.
// Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
// Defaults to `#{project.stereotype}`.
//
"stereotype": "CLI",
// Additional properties used when evaluating templates.
//
"extraProperties": {
// Key will be capitalized and prefixed with `javaArchive`, i.e, `javaArchiveFoo`.
"foo": "bar"
},
// Name of the archive.
// If left undefined, will use {{distributionName}}-{{projectVersion}}.
//
"archiveName": "app-{{projectVersion}}",
//
"executable": {
// Name of the executable launcher.
// If left undefined, will use `#{distribution.name}`.
//
"name": "app",
// Executable extension on Linux/MacOS.
// If left undefined, value will be left empty.
//
"unixExtension": "sh",
// Executable extension on Windows.
// If left undefined, will use `bat`.
//
"windowsExtension": "cmd"
},
// Set of archive formats to use.
// Supported values are [`ZIP`, `TAR`, `TAR_BZ2`, `TAR_GZ`, `TAR_XZ`, `TAR_ZST`, `TBZ2`, `TGZ`, `TXZ`].
//
"formats": [
"ZIP",
"TGZ"
],
//
"options": {
// Timestamp to use for each entry.
// Must follow ISO-8601 +HH:MM timezone offset.
// Example: 2023-03-08T12:56:33.024578+01:00
// Defaults to timestamp for latest git commit or current time.
//
"timestamp": "2020-01-01T00:00:00.000000+00:00",
// Set longFileMode for tar archives.
// Possible values are [`ERROR`, `GNU`, `POSIX`, `TRUNCATE`].
// Defaults to `ERROR`.
//
"longFileMode": "POSIX",
// Set bigNumberMode for tar archives.
// Possible values are [`ERROR`, `GNU`, `POSIX`].
// Defaults to `ERROR`.
//
"bigNumberMode": "POSIX"
},
// The executable JAR that contains the application.
//
"mainJar": {
"path": "path/to/app.jar"
},
// Defines a list of additional JARs as globs.
//
"jars": [
{
// The pattern to use.
// May use glob or regex pattern syntax.
//
"pattern": "path/to/**/*.jar"
}
],
//
"java": {
// Name of main module (if any).
// Define only if the application is modular.
//
"mainModule": "com.acme.demo",
// The application's entry point.
// If left undefined, will use `#{project.java.mainClass}`.
//
"mainClass": "com.acme.Main",
// Options to pass to the Java runtime
//
"jvmOptions": {
// Included in all scripts
//
"universal": [
"-Dprop=value"
],
// Included in all non Windows scripts
//
"unix": [
"-Dprop=value"
],
// Included in all non Windows (except OSX) scripts
//
"linux": [
"-Dprop=value"
],
// Included only in OSX scripts
//
"osx": [
"-Dprop=value"
],
// Included in Windows scripts
//
"windows": [
"-Dprop=value"
]
},
// Environment variables used in launch scripts.
//
"environmentVariables": {
// Included in all scripts
//
"universal": {
"KEY": "value"
},
// Included in all non Windows scripts
//
"unix": {
"KEY": "value"
},
// Included in all non Windows (except OSX) scripts
//
"linux": {
"KEY": "value"
},
// Included only in OSX scripts
//
"osx": {
"KEY": "value"
},
// Included in Windows scripts
//
"windows": {
"KEY": "value"
}
},
},
// Directory with file templates used to prepare the assembler.
// Defaults to `src/jreleaser/assemblers/#$#{distribution.name}/javaArchive`.
// If specified, path must exist.
//
"templateDirectory": "path/to/javaArchive/templates",
// List of template files to be skipped.
// Value may be an exact match or a regex.
//
"skipTemplates": [
"README.md.tpl"
],
// Defines a list of additional files as artifacts.
// These files will be added to the assembled archive.
//
"artifacts": [
{
"path": "path/to/file"
},
{
"path": "path/to/another_file",
"transform": "path/inside/archive"
},
{
"path": "path/to/platform/specific/file",
"platform": "osx-x86_64"
}
] ,
// Defines a list of additional files as globs.
// These files will be added to the assembled archive.
//
"files": [
{
// The pattern to use.
// May use glob or regex pattern syntax.
//
"pattern": "path/to/**/*.txt"
}
],
//
"fileSets": [
{
// The input directory to copy files from.
//
"input": "path/to/input/directory",
// The target path inside the archive.
// If left undefined, defaults to the root of the archive.
//
"output": "path/to/archive/entry",
// Fail if the given `input` does not exist.
// Defaults to `true`.
//
"failOnMissingInput": false,
// A set of files and directory to include.
//
"includes": ["name_or_regex"],
// A set of files and directory to exclude.
//
"excludes": ["name_or_regex"],
// Additional properties used when evaluating templates.
//
"extraProperties": {
// Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
"foo": "bar"
}
}
],
//
"swid": {
// Tags require a name.
//
"mytag": {
// Enables or disables the tag.
// Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
//
"active": "ALWAYS",
// Reference to a common tag.
//
"tagRef": "swid-tag",
// Path where the tag file will be placed.
// Defaults to `SWIDTAG`.
//
"path": "SWID",
// A globally unique identifier and should be assigned a GUID reference.
// Defaults to a UUID generated with `groupId`, `artifactId`, `version`, `vendor`.
//
"tagId": "c526ec37-2715-328e-8bbc-4eb5a9f47c98",
// Indicates if a specific release of a software product has more than one tag that can represent that specific release.
// Defaults to `1`.
//
"tagVersion": 2,
// Language used in the tag document.
// Defaults to `en-US`.
//
"lang": "de",
// If this SWID tag is a collection of information that describes the pre-installation data of software component.
// Defaults to `false`.
//
"corpus": true,
// If this SWID tag describes a product patch or modification to a different software element.
// Defaults to `false`.
//
"patch": false,
// List of organizations related to the software component referenced by this SWID tag.
//
"entities": [
{
// name of the organization claiming a particular role in the SWID tag.
//
"name": "Acme",
// URI of the claiming organization.
// Defaults to `http://invalid.unavailable`.
//
"regid": "https://acme.com",
// The relationship between this organization and this tag e.g. tag, `softwareCreator`, `licensor`, `tagCreator`, etc.
// The role of `tagCreator` is required for every SWID tag. May include any role value, but the pre-defined roles
// include: `aggregator`, `distributor`, `licensor`, `softwareCreator`, `tagCreator`.
// Other roles will be defined as the market uses the SWID tags.
// Defaults to [`tagCreator`, `softwareCreator`].
//
"roles": [
"tagCreator",
"softwareCreator"
]
}
]
}
}
}
}
}
}
<jreleaser>
<!--
-->
<assemble>
<!--
-->
<javaArchive>
<!--
Assemblers require a name.
-->
<app>
<!--
Enables or disables the distribution.
Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
Defaults to `ALWAYS`.
-->
<active>ALWAYS</active>
<!--
Export the assembled artifacts as a matching named distribution.
Defaults to `true`.
-->
<exported>true</exported>
<!--
The stereotype of this assembler.
Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
Defaults to `#{project.stereotype}`.
-->
<stereotype>CLI</stereotype>
<!--
Additional properties used when evaluating templates.
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `javaArchive`, i.e, `javaArchiveFoo`.
-->
<foo>bar</foo>
</extraProperties>
<!--
Name of the archive.
If left undefined, will use {{distributionName}}-{{projectVersion}}.
-->
<archiveName>app-{{projectVersion}}</archiveName>
<!--
-->
<executable>
<!--
Name of the executable launcher.
If left undefined, will use `#{distribution.name}`.
-->
<name>app</name>
<!--
Executable extension on Linux/MacOS.
If left undefined, value will be left empty.
-->
<unixExtension>sh</unixExtension>
<!--
Executable extension on Windows.
If left undefined, will use `bat`.
-->
<windowsExtension>cmd</windowsExtension>
</executable>
<!--
Set of archive formats to use.
Supported values are [`ZIP`, `TAR`, `TAR_BZ2`, `TAR_GZ`, `TAR_XZ`, `TAR_ZST`, `TBZ2`, `TGZ`, `TXZ`].
-->
<formats>
<format>ZIP</format>
<format>TGZ</format>
</formats>
<!--
-->
<options>
<!--
Timestamp to use for each entry.
Must follow ISO-8601 +HH:MM timezone offset.
Example: 2023-03-08T12:56:33.024578+01:00
Defaults to timestamp for latest git commit or current time.
-->
<timestamp>2020-01-01T00:00:00.000000+00:00</timestamp>
<!--
Set longFileMode for tar archives.
Possible values are [`ERROR`, `GNU`, `POSIX`, `TRUNCATE`].
Defaults to `ERROR`.
-->
<longFileMode>POSIX</longFileMode>
<!--
Set bigNumberMode for tar archives.
Possible values are [`ERROR`, `GNU`, `POSIX`].
Defaults to `ERROR`.
-->
<bigNumberMode>POSIX</bigNumberMode>
</options>
<!--
The executable JAR that contains the application.
-->
<mainJar>
<path>path/to/app.jar</path>
</mainJar>
<!--
Defines a list of additional JARs as globs.
-->
<jars>
<jar>
<!--
The pattern to use.
May use glob or regex pattern syntax.
-->
<pattern>path/to/**/*.jar</pattern>
</jar>
</jars>
<!--
-->
<java>
<!--
Name of main module (if any).
Define only if the application is modular.
-->
<mainModule>com.acme.demo</mainModule>
<!--
The application's entry point.
If left undefined, will use `#{project.java.mainClass}`.
-->
<mainClass>com.acme.Main</mainClass>
<!--
Options to pass to the Java runtime
-->
<jvmOptions>
<!--
Included in all scripts
-->
<universal>-Dprop=value</universal>
<!--
Included in all non Windows scripts
-->
<unix>-Dprop=value</unix>
<!--
Included in all non Windows (except OSX) scripts
-->
<linux>-Dprop=value</linux>
<!--
Included only in OSX scripts
-->
<osx>-Dprop=value</osx>
<!--
Included in Windows scripts
-->
<windows>-Dprop=value</windows>
</jvmOptions>
<!--
Environment variables used in launch scripts.
-->
<environmentVariables>
<!--
Included in all scripts
-->
<universal>
<KEY>value</KEY>
</universal>
<!--
Included in all non Windows scripts
-->
<unix>
<KEY>value</KEY>
</unix>
<!--
Included in all non Windows (except OSX) scripts
-->
<linux>
<KEY>value</KEY>
</linux>
<!--
Included only in OSX scripts
-->
<osx>
<KEY>value</KEY>
</osx>
<!--
Included in Windows scripts
-->
<windows>
<KEY>value</KEY>
</windows>
</environmentVariables>
</java>
<!--
Directory with file templates used to prepare the assembler.
Defaults to `src/jreleaser/assemblers/#{distribution.name}/javaArchive`.
If specified, path must exist.
-->
<templateDirectory>path/to/javaArchive/templates</templateDirectory>
<!--
List of template files to be skipped.
Value may be an exact match or a regex.
-->
<skipTemplates>
<skipTemplate>README.md.tpl</skipTemplate>
</skipTemplates>
<!--
Defines a list of additional files as artifacts.
These files will be added to the assembled archive.
-->
<artifacts>
<artifact>
<path>path/to/file</path>
</artifact>
<artifact>
<path>path/to/another_file</path>
<transform>path/inside/archive</transform>
</artifact>
<artifact>
<path>path/to/platform/specific/file</path>
<platform>osx-x86_64</platform>
</artifact>
</artifacts>
<!--
Defines a list of additional files as globs.
These files will be added to the assembled archive.
-->
<files>
<file>
<!--
The pattern to use.
May use glob or regex pattern syntax.
-->
<pattern>path/to/**/*.txt</pattern>
</file>
</files>
<!--
-->
<fileSets>
<fileSet>
<!--
The input directory to copy files from.
-->
<input>path/to/input/directory</input>
<!--
The target path inside the archive.
If left undefined, defaults to the root of the archive.
-->
<output>path/to/archive/entry</output>
<!--
Fail if the given `input` does not exist.
Defaults to `true`.
-->
<failOnMissingInput>false</failOnMissingInput>
<!--
A set of files and directory to include.
-->
<includes>
<include>name_or_regex</include>
</includes>
<!--
A set of files and directory to exclude.
-->
<excludes>
<exclude>name_or_regex</exclude>
</excludes>
<!--
Additional properties used when evaluating templates.
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
-->
<foo>bar</foo>
</extraProperties>
</fileSet>
</fileSets>
<!--
-->
<swid>
<!--
Tags require a name.
-->
<mytag>
<!--
Enables or disables the tag.
Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
Defaults to `NEVER`.
-->
<active>ALWAYS</active>
<!--
Reference to a common tag.
-->
<tagRef>swid-tag</tagRef>
<!--
Path where the tag file will be placed.
Defaults to `SWIDTAG`.
-->
<path>SWID</path>
<!--
A globally unique identifier and should be assigned a GUID reference.
Defaults to a UUID generated with `groupId`, `artifactId`, `version`, `vendor`.
-->
<tagId>c526ec37-2715-328e-8bbc-4eb5a9f47c98</tagId>
<!--
Indicates if a specific release of a software product has more than one tag that can represent that specific release.
Defaults to `1`.
-->
<tagVersion>2</tagVersion>
<!--
Language used in the tag document.
Defaults to `en-US`.
-->
<lang>de</lang>
<!--
If this SWID tag is a collection of information that describes the pre-installation data of software component.
Defaults to `false`.
-->
<corpus>true</corpus>
<!--
If this SWID tag describes a product patch or modification to a different software element.
Defaults to `false`.
-->
<patch>false</patch>
<!--
List of organizations related to the software component referenced by this SWID tag.
-->
<entities>
<entity>
<!--
name of the organization claiming a particular role in the SWID tag.
-->
<name>Acme</name>
<!--
URI of the claiming organization.
Defaults to `http://invalid.unavailable`.
-->
<regid>https://acme.com</regid>
<!--
The relationship between this organization and this tag e.g. tag, `softwareCreator`, `licensor`, `tagCreator`, etc.
The role of `tagCreator` is required for every SWID tag. May include any role value, but the pre-defined roles
include: `aggregator`, `distributor`, `licensor`, `softwareCreator`, `tagCreator`.
Other roles will be defined as the market uses the SWID tags.
Defaults to [`tagCreator`, `softwareCreator`].
-->
<roles>
<role>tagCreator</role>
<role>softwareCreator</role>
</roles>
</entity>
</entities>
</swid-tag>
</swid>
</app>
</javaArchive>
</assemble>
</jreleaser>
jreleaser {
//
assemble {
//
javaArchive {
// Assemblers require a name.
//
app {
// Enables or disables the assembler.
// Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
//
active = 'ALWAYS'
// Export the assembled artifacts as a matching named distribution.
// Defaults to `true`.
//
exported = true
// The stereotype of this assembler.
// Supported values are [`NONE`, `CLI`, `DESKTOP`, `WEB`, `MOBILE`].
// Defaults to `#{project.stereotype}`.
//
stereotype = 'CLI'
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `javaArchive`, i.e, `javaArchiveFoo`.
//
extraProperties.put('foo', 'bar')
// Name of the archive.
// If left undefined, will use {{distributionName}}-{{projectVersion}}.
//
archiveName = 'app-{{projectVersion}}'
//
executable {
// Name of the executable launcher.
// If left undefined, will use `#{distribution.name}`.
//
name = 'app'
// Executable extension on Linux/MacOS.
// If left undefined, value will be left empty.
//
unixExtension = 'sh'
// Executable extension on Windows.
// If left undefined, will use `bat`.
//
windowsExtension = 'cmd'
}
// Set of archive formats to use.
// Supported values are [`ZIP`, `TAR`, `TAR_BZ2`, `TAR_GZ`, `TAR_XZ`, `TAR_ZST`, `TBZ2`, `TGZ`, `TXZ`].
//
formats = [
'ZIP',
'TGZ'
]
//
options {
// Timestamp to use for each entry.
// Must follow ISO-8601 + timezone offset.
// Example: 2023-03-08T12:56:33.024578+01:00
// Defaults to timestamp for latest git commit or current time.
//
timestamp = '2020-01-01T00:00:00.000000+00:00'
// Set longFileMode for tar archives.
// Possible values are [`ERROR`, `GNU`, `POSIX`, `TRUNCATE`].
// Defaults to `ERROR`.
//
longFileMode = 'POSIX'
// Set bigNumberMode for tar archives.
// Possible values are [`ERROR`, `GNU`, `POSIX`].
// Defaults to `ERROR`.
//
bigNumberMode = 'POSIX'
}
// The executable JAR that contains the application.
//
mainJar {
path = 'path/to/app.jar'
}
// Defines a list of additional JARs as globs.
//
jars {
// The pattern to use.
// May use glob or regex pattern syntax.
//
pattern = 'path/to/**/*.jar'
}
//
java {
// Name of main module (if any).
// Define only if the application is modular.
//
mainModule = 'com.acme.demo'
// The application's entry point.
// If left undefined, will use `#{project.java.mainClass}`.
//
mainClass = 'com.acme.Main'
// Options to pass to the Java runtime
//
jvmOptions {
// Included in all scripts
//
universal('-Dprop=value')
// Included in all non Windows scripts
//
unix('-Dprop=value')
// Included in all non Windows (except OSX) scripts
//
linux('-Dprop=value')
// Included only in OSX scripts
//
osx('-Dprop=value')
// Included in Windows scripts
//
windows('-Dprop=value')
}
// Environment variables used in launch scripts.
//
environmentVariables {
// Included in all scripts
//
universal('KEY', 'value')
// Included in all non Windows scripts
//
unix('KEY', 'value')
// Included in all non Windows (except OSX) scripts
//
linux('KEY', 'value')
// Included only in OSX scripts
//
osx('KEY', 'value')
// Included in Windows scripts
//
windows('KEY', 'value')
}
}
// Directory with file templates used to prepare the assembler.
// Defaults to `src/jreleaser/assemblers/#{distribution.name}/javaArchive`.
// If specified, path must exist.
//
templateDirectory = 'path/to/javaArchive/templates'
// List of template files to be skipped.
// Value may be an exact match or a regex.
//
skipTemplate('README.md.tpl')
// Defines a list of additional files as artifacts.
// These files will be added to the assembled archive.
//
artifact {
path = 'path/to/file'
}
artifact {
path = 'path/to/another_file'
transform = 'path/inside/archive'
}
artifact {
path = 'path/to/platform/specific/file'
platform = 'osx-x86_64'
}
// Defines a list of additional files as globs.
// These files will be added to the assembled archive.
//
files {
// The pattern to use.
// May use glob or regex pattern syntax.
//
pattern = 'path/to/**/*.txt'
}
//
fileSet {
// The input directory to copy files from.
//
input = 'path/to/input/directory'
// The target path inside the archive.
// If left undefined, defaults to the root of the archive.
//
output = 'path/to/archive/entry'
// Fail if the given `input` does not exist.
// Defaults to `true`.
//
failOnMissingInput = false
// A set of files and directory to include.
//
includes = ['name_or_regex']
// A set of files and directory to exclude.
//
excludes = ['name_or_regex']
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
//
extraProperties.put('foo', 'bar')
}
//
swid {
// Tags require a name.
//
mytag {
// Enables or disables the tag.
// Supported values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
//
active = 'ALWAYS'
// Reference to a common tag.
//
tagRef = 'swid-tag'
// Path where the tag file will be placed.
// Defaults to `SWIDTAG`.
//
path = 'SWID'
// A globally unique identifier and should be assigned a GUID reference.
// Defaults to a UUID generated with `groupId`, `artifactId`, `version`, `vendor`.
//
tagId = 'c526ec37-2715-328e-8bbc-4eb5a9f47c98'
// Indicates if a specific release of a software product has more than one tag that can represent that specific release.
// Defaults to `1`.
//
tagVersion = 2
// Language used in the tag document.
// Defaults to `en-US`.
//
lang = 'de'
// If this SWID tag is a collection of information that describes the pre-installation data of software component.
// Defaults to `false`.
//
corpus = true
// If this SWID tag describes a product patch or modification to a different software element.
// Defaults to `false`.
//
patch = false
// List of organizations related to the software component referenced by this SWID tag.
//
entity {
// name of the organization claiming a particular role in the SWID tag.
//
name = 'Acme'
// URI of the claiming organization.
// Defaults to `http://invalid.unavailable`.
//
regid = 'https://acme.com'
// The relationship between this organization and this tag e.g. tag, `softwareCreator`, `licensor`, `tagCreator`, etc.
// The role of `tagCreator` is required for every SWID tag. May include any role value, but the pre-defined roles
// include: `aggregator`, `distributor`, `licensor`, `softwareCreator`, `tagCreator`.
// Other roles will be defined as the market uses the SWID tags.
// Defaults to [`tagCreator`, `softwareCreator`].
//
role('tagCreator')
role('softwareCreator')
}
}
}
}
}
}
}
Environment
When not explicitly set, the value of the following properties may be resolved from an environment variable or a system property as shown in the table. The system property takes precedence over the environment variable.
System Property | Environment Variable |
---|---|
active |
|
jreleaser.assemble.java.archive.${name}.active |
JRELEASER_ASSEMBLE_JAVA_ARCHIVE_${name}_ACTIVE |
Substitute ${name} for the value of the named instance. |
Space (' '), underscore (_
), and dash (-
) will be replaced by dot (.
) to separate tokens in the System property.
Space (' '), dash (-
), and dot (.
) will be replaced by underscore (_
) to separate tokens in the environment variable,
such that:
${name} | System Property | Environment Variable |
---|---|---|
foobar |
|
|
fooBar |
|
|
foo bar |
|
|
foo-bar |
|
|
foo_bar |
|
|
foo.bar |
|
|
Templates
The default location for templates is:
src/jreleaser/assemblers/<distribution-name>/java-archive
The following list shows the filenames that may be used to override default templates:
-
bin/launcher.tpl
-
bin/launcher.bat.tpl
Any additional files found in the template directories will be copied as is unless their filename ends with .tpl
in
which case Name Templates substitution will take place.
Skip Templates
You may skip any template files by defining a set of skip rules in the skipTemplates
property. For example, you may use
any of these expressions to skip a template named README.md.tpl
:
-
README.md.tpl
: matches the full template name -
README.md
: matches the transformed template name -
README.*
: matches using a regex
Additional Files
There are several ways to define additional files that may be handled by this assembler.
Templates
-
You may use Name Templates inside the files to be copied.
-
They retain directory structure that is, a template found at
{templateDirectory}/foo.txt.tpl
will be copied asfoo.txt
while a template such as{templateDirectory}/docs/bar.md.tpl
will be copied todocs/bar.md
.
FileSets
-
May use globs or regexes to define files to be included from a starting directory.
-
They retain directory structure.
-
May rename the target parent directory.
Files
-
May use globs or regexes to define files to be included from a starting directory.
-
They do not retain directory structure. Only filenames are copied.
Artifacts
-
They do not retain directory structure by default. An artifact with
path
set tobin/launcher.sh
will be copied tolauncher.sh
. -
May use the
transform
property to define the target path. An artifact withpath
set tobin/launcher.sh
andtransform
set tobin/{{projectName}}
will be copied tobin/app
[assumingprojectName
resolves toapp
]. -
May use the
platform
property to filter files per matching platform. An artifact withplatform
set towindows-x86_64
will only be copied when the matching platform is compatible withwindows-x86_64
. -
Artifacts without an explicit
platform
won’t be filtered.
This assembler ignores filtering artifacts by platform. |
Example
Classpath
Given the following file structure for an application that will be run on the classpath
.
├── BUILD
├── LICENSE
├── README
└── target
└── app-1.0.0.jar
And this assembly configuration
project:
version: 1.0.0
description: Sample application
authors:
- Duke
inceptionYear: 2020
assemble:
javaArchive:
app:
active: ALWAYS
fileSets:
- input: '.'
includes:
- 'LICENSE'
- 'README'
mainJar:
path: target/{{distributionName}}-{{projectVersion}}.jar
java:
mainClass: com.acme.Main
[project]
version = "1.0.0"
description = "Sample application"
authors = [ "Duke" ]
inceptionYear = "2020"
[assemble.javaArchive.app]
active = "ALWAYS"
[[assemble.archive.app.fileSets]]
input = "."
includes = ["LICENSE", "README"]
[[assemble.archive.app.mainJar]]
path = "target/{{distributionName}}-{{projectVersion}}.jar"
[[assemble.archive.app.java]]
mainClass = "com.acme.Main"
{
"project": {
"version": "1.0.0",
"description": "Sample application",
"authors": [ "Duke" ],
"inceptionYear": "2020"
},
"assemble": {
"javaArchive": {
"app": {
"active": "ALWAYS",
"fileSets": [
{
"input": ".",
"includes": ["LICENSE", "README"]
}
],
"mainJar": [
{
"path": "target/{{distributionName}}-{{projectVersion}}.jar"
}
],
"java": {
"mainClass": "com.acme.Main"
}
}
}
}
}
<jreleaser>
<project>
<version>1.0.0</version>
<description>Sample application</description>
<authors>Duke</authors>
<inceptionYear>2020</inceptionYear>
</project>
<assemble>
<javaArchive>
<app>
<active>ALWAYS</active>
<fileSets>
<fileSet>
<input>.</input>
<includes>
<include>LICENSE</include>
<include>README</include>
</includes>
</fileSet>
</fileSets>
<mainJar>
<path>target/{{distributionName}}-{{projectVersion}}.jar</path>
</mainJar>
<java>
<mainClass>com.acme.Main</mainClass>
</java>
</app>
</javaArchive>
</assemble>
</jreleaser>
jreleaser {
project {
version = '1.0.0'
description = 'Sample application'
author('Duke')
inceptionYear: '2020'
}
assemble {
javaArchive {
app {
active = 'ALWAYS'
fileSet {
input = '.'
includes = ['LICENSE', 'README']
}
mainJar {
path = 'target/{{distributionName}}-{{projectVersion}}.jar'
}
java {
mainClass = 'com.acme.Main'
}
}
}
}
}
Results in an assembled Zip archive named app-1.0.0.zip
with the following entries
.
├── LICENSE
├── README
├── bin
│ ├── app
│ └── app.bat
└── lib
└── app-1.0.0.jar
Modulepath
Given the following file structure for an application that will be run on the modulepath
.
├── BUILD
├── LICENSE
├── README
└── target
└── app-1.0.0.jar
And this assembly configuration
project:
version: 1.0.0
description: Sample application
authors:
- Duke
inceptionYear: 2020
assemble:
javaArchive:
app:
active: ALWAYS
fileSets:
- input: '.'
includes:
- 'LICENSE'
- 'README'
mainJar:
path: target/{{distributionName}}-{{projectVersion}}.jar
java:
mainClass: com.acme.Main
mainModule: com.acme
[project]
version = "1.0.0"
description = "Sample application"
authors = [ "Duke" ]
inceptionYear = "2020"
[assemble.javaArchive.app]
active = "ALWAYS"
[[assemble.archive.app.fileSets]]
input = "."
includes = ["LICENSE", "README"]
[[assemble.archive.app.mainJar]]
path = "target/{{distributionName}}-{{projectVersion}}.jar"
[[assemble.archive.app.java]]
mainClass = "com.acme.Main"
mainModule = "com.acme"
{
"project": {
"version": "1.0.0",
"description": "Sample application",
"authors": [ "Duke" ],
"inceptionYear": "2020"
},
"assemble": {
"javaArchive": {
"app": {
"active": "ALWAYS",
"fileSets": [
{
"input": ".",
"includes": ["LICENSE", "README"]
}
],
"mainJar": [
{
"path": "target/{{distributionName}}-{{projectVersion}}.jar"
}
],
"java": {
"mainClass": "com.acme.Main",
"mainModule": "com.acme"
}
}
}
}
}
<jreleaser>
<project>
<version>1.0.0</version>
<description>Sample application</description>
<authors>Duke</authors>
<inceptionYear>2020</inceptionYear>
</project>
<assemble>
<javaArchive>
<app>
<active>ALWAYS</active>
<fileSets>
<fileSet>
<input>.</input>
<includes>
<include>LICENSE</include>
<include>README</include>
</includes>
</fileSet>
</fileSets>
<mainJar>
<path>target/{{distributionName}}-{{projectVersion}}.jar</path>
</mainJar>
<java>
<mainClass>com.acme.Main</mainClass>
<mainModule>com.acme</mainModule>
</java>
</app>
</javaArchive>
</assemble>
</jreleaser>
jreleaser {
project {
version = '1.0.0'
description = 'Sample application'
author('Duke')
inceptionYear: '2020'
}
assemble {
javaArchive {
app {
active = 'ALWAYS'
fileSet {
input = '.'
includes = ['LICENSE', 'README']
}
mainJar {
path = 'target/{{distributionName}}-{{projectVersion}}.jar'
}
java {
mainClass = 'com.acme.Main'
mainModule = 'com.acme'
}
}
}
}
}
Results in an assembled Zip archive named app-1.0.0.zip
with the following entries
.
├── LICENSE
├── README
├── bin
│ ├── app
│ └── app.bat
└── lib
└── app-1.0.0.jar