Document latest changes

This commit is contained in:
Andres Almiray
2021-04-17 13:45:41 +02:00
parent 0eb0050a51
commit 6beecf954e
28 changed files with 2650 additions and 92 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View File

@@ -2,3 +2,4 @@
** xref:distributions/java-binary.adoc[]
** xref:distributions/single-jar.adoc[]
** xref:distributions/jlink.adoc[]
** xref:distributions/native-image.adoc[]

View File

@@ -44,6 +44,8 @@ applications. Generates distribution files that follow the expected structure. A
* link:https://badass-jlink-plugin.beryx.org/releases/latest/[badass-jlink-plugin] plugin: use it for *modular*
applications. Generates distribution files that follow the expected structure. Also, packages the distribution as a Zip.
You may also configure a xref:configuration:assemble/jlink.adoc[] assembler.
== Packager Support
[%header, cols="<,^"]

View File

@@ -0,0 +1,31 @@
= Native Image
Distributions of this type provide a platform specific native binary, as a consequence you *must* specify a value for
their platform.
== Creating a Distribution
Native image binaries can be created in many ways. Frameworks such as Micronaut, Quarkus, and Helidon provide Maven and
Gradle plugins that can create such binaries.
.Maven
* link:https://www.graalvm.org/reference-manual/native-image/NativeImageMavenPlugin/[native-image-maven-plugin].
You may also configure a xref:configuration:assemble/native-image.adoc[] assembler.
== Packager Support
[%header, cols="<,^"]
|===
| Packager | Supported
| xref:configuration:packagers/chocolatey.adoc[] | {icon_req_n}
| xref:configuration:packagers/docker.adoc[] | {icon_req_y}
| xref:configuration:packagers/homebrew.adoc[] | {icon_req_y}
| xref:configuration:packagers/jbang.adoc[] | {icon_req_n}
| xref:configuration:packagers/scoop.adoc[] | {icon_req_y}
| xref:configuration:packagers/snap.adoc[] | {icon_req_y}
|===

View File

@@ -15,6 +15,13 @@ image::jreleaser-workflow.png[]
The following sections describe these steps:
== Assemble
Assembles distributions such as Jlink and Native Image. Outputs will automatically configure/update matching named
distributions for xref:_prepare[], xref:_package[], and xref:_upload[].
Given the nature of platform specific distributions this step must be invoked separatedly from the others.
== Changelog
Creates the changelog, either by taking a supplemented external file or calculates it based on the last tag that matches

View File

@@ -6,6 +6,9 @@
** xref:release/github.adoc[]
** xref:release/gitlab.adoc[]
** xref:release/gitea.adoc[]
* xref:assemble/index.adoc[]
** xref:assemble/jlink.adoc[]
** xref:assemble/native-image.adoc[]
* xref:packagers/index.adoc[]
** xref:packagers/chocolatey.adoc[]
** xref:packagers/docker.adoc[]

View File

@@ -0,0 +1,92 @@
= Assemble
Some distribution types may be assembled by JReleaser.
include::partial$legend.adoc[]
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
# icon:dot-circle[]
assemble:
# Enable or disable all configured assemblers.
# Defaults to `true`.
# icon:dot-circle[]
enabled: true
----
TOML::
+
[source,toml]
[subs="+macros"]
----
# icon:dot-circle[]
[assemble]
# Enable or disable all configured assemblers.
# Defaults to `true`.
# icon:dot-circle[]
enable = true
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
// icon:dot-circle[]
"assemble": {
// Enable or disable all configured assemblers.
// Defaults to `true`.
// icon:dot-circle[]
"enabled": true
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim"]
----
<jreleaser>
<!--
icon:dot-circle[]
-->
<assemble>
<!--
Enable or disable all configured assemblers.
Defaults to `true`.
icon:dot-circle[]
-->
<enabled>true</enabled>
</assemble>
</jreleaser>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
jreleaser {
// icon;dot-circle[]
assemble {
// Enable or disable all configured assemblers.
// Defaults to `true`.
// icon:dot-circle[]
enabled = true
}
}
----
====
Assemblers will configure a matching distribution by name if it exists, otherwise they'll create a new distribution
with their respective name. Assemblers can configure the following distribution properties:
* active
* executable
* java
* artifacts
* extraProperties

View File

@@ -0,0 +1,803 @@
= Jlink
Creates a Java Runtime image using link:https://docs.oracle.com/en/java/javase/11/tools/jlink.html[Jlink].
TIP: Cross platform Java runtime images may be created however you must ensure that all configured JDKs have the
same matching major version.
IMPORTANT: You have to install additional JDKs to enable cross-platform images. JReleaser will *not* install these JDKS
for you.
include::partial$legend.adoc[]
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
# icon:dot-circle[]
assemble:
# icon:dot-circle[]
jlink:
# Assemblers require a name.
# icon:exclamation-triangle[]
app:
# Enables or disables the assembler.
# Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
# icon:dot-circle[]
active: ALWAYS
# Name of the executable launcher.
# If left undefined, will use ${assembler.name}.
# icon:dot-circle[]
executable: app
# Directory with file templates used to prepare the Jlink assembler.
# Defaults to `src/jreleaser/assemblers/${distribution.name}/jlink`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/jlink/templates
# Name of the generated image.
# If left undefined, will use
# ${project.java.groupId}.${project.java.artifactId}.${project.version}.
# icon:dot-circle[] icon:file-alt[]
imageName: app
# Name of main module (if any).
# Define only if the application is modular.
# icon:dot-circle[]
moduleName: com.acme.demo
# List of module names.
# Define only if jdeps can't find all required modules.
# icon:dot-circle[]
moduleNames:
- java.base
- com.acme.demo
# List of JDKs for generating cross-platform images.
# icon:dot-circle[] icon:file-alt[]
targetJdks:
- path: path/to/jdk
platform: osx
- path: path/to/jdk
platform: linux
# The JDK to use.
# If undefined, will use the current JDK running JReleaser.
# icon:exclamation-triangle[] icon:file-alt[]
jdk:
path: path/to/jdk
platform: linux
# A list of build arguments.
# Defaults are shown.
# icon:dot-circle[]
args:
- "--no-header-files"
- "--no-man-pages"
- "--compress=2"
- "--strip-debug"
# The executable JAR that contains the application.
# icon:exclamation-triangle[] icon:file-alt[]
mainJar:
path: path/to/app.jar
# Defines a list of additional JARs as globs.
# icon:dot-circle[]
jars:
# The directory to search.
# If undefined, will use the project's basedir.
# icon:dot-circle[] icon:file-alt[]
- directory: some/directory
# The pattern to apply for inclusion.
# If undefined, will use `*`.
# icon:dot-circle[]
include: '*.jar'
# The pattern to apply for exclusion.
# icon:dot-circle[]
exclude: 'secret'
# Recursive search.
# Defaults to `false`.
# icon:dot-circle[]
recursive: true
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties:
# Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
foo: bar
# icon:dot-circle[]
java:
# Maven coordinates: groupId.
# If left undefined, will use ${project.java.groupId}.
# icon:dot-circle[]
groupId: com.acme
# Maven coordinates: artifactId.
# If left undefined, will use ${project.java.artifactId}.
# icon:dot-circle[]
artifactId: app
# The minimum Java version required by consumers to run the application.
# If left undefined, will use ${project.java.version}.
# icon:dot-circle[]
version: 8
# The application's entry point.
# If left undefined, will use ${project.java.mainClass}.
# icon:dot-circle[]
mainClass: com.acme.Main
# Identifies the project as being member of a multi-project build.
# If left undefined, will use ${project.java.multiProject}.
# icon:dot-circle[]
multiProject: false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties:
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
foo: bar
----
TOML::
+
[source,toml]
[subs="+macros"]
----
# Assemblers require a name.
# icon:exclamation-triangle[]
[assemble.jlink.app]
# Enables or disables the assembler.
# Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
# icon:dot-circle[]
active = "ALWAYS"
# Name of the executable launcher.
# If left undefined, will use ${assembler.name}.
# icon:dot-circle[]
executable = "app"
# Directory with file templates used to prepare the Jlink assembler.
# Defaults to `src/jreleaser/assemblers/${distribution.name}/jlink`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/jlink/templates"
# Name of the generated image.
# If left undefined, will use
# ${project.java.groupId}.${project.java.artifactId}.${project.version}.
# icon:dot-circle[] icon:file-alt[]
imageName = "app"
# Name of main module (if any).
# Define only if the application is modular.
# icon:dot-circle[]
moduleName = "com.acme.demo"
# List of module names.
# Define only if jdeps can't find all required modules.
# icon:dot-circle[]
moduleName = [
"java.base",
"com.acme.demo"]
# List of JDKs for generating cross-platform images.
# icon:dot-circle[] icon:file-alt[]
targetJdks = [
{ path = "path/to/jdk", platform = "osx" },
{ path = "path/to/jdk", platform = "linux" }]
# The JDK to use.
# If undefined, will use the current JDK running JReleaser.
# icon:exclamation-triangle[] icon:file-alt[]
jdk = { path = "path/to/jdk", platform = "linux" }
# A list of build arguments.
# Defaults are shown
# icon:dot-circle[]
args = ["--no-header-files",
"--no-man-pages",
"--compress=2",
"--strip-debug"]
# The executable JAR that contains the application.
# icon:exclamation-triangle[] icon:file-alt[]
mainJar = { path = "path/to/app.jar" }
# Defines a list of additional JARs as globs.
# icon:dot-circle[]
pass:[[[assemble.jlink.app.jars]]]
# The directory to search.
# If undefined, will use the project's basedir.
# icon:dot-circle[] icon:file-alt[]
directory = "some/directory"
# The pattern to apply for inclusion.
# If undefined, will use `*`.
# icon:dot-circle[]
include = "*.jar"
# The pattern to apply for exclusion.
# icon:dot-circle[]
exclude = "secret"
# Recursive search.
# Defaults to `false`.
# icon:dot-circle[]
recursive = true
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
# Maven coordinates: groupId.
# If left undefined, will use ${project.java.groupId}.
# icon:dot-circle[]
java.groupId = "com.acme"
# Maven coordinates: artifactId.
# If left undefined, will use ${project.java.artifactId}.
# icon:dot-circle[]
java.artifactId = "app"
# The minimum Java version required by consumers to run the application.
# If left undefined, will use ${project.java.version}.
# icon:dot-circle[]
java.version = "8"
# The application's entry point.
# If left undefined, will use ${project.java.mainClass}.
# icon:dot-circle[]
java.mainClass = "com.acme.Main"
# Identifies the project as being member of a multi-project build.
# If left undefined, will use ${project.java.multiProject}.
# icon:dot-circle[]
java.multiProject = false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
java.extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
// icon:dot-circle[]
"assemble": {
// icon:dot-circle[]
"jlink": {
// Assemblers require a name.
// icon:exclamation-triangle[]
"app": {
// Enables or disables the assembler.
// Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
// icon:dot-circle[]
"active": "ALWAYS",
// Name of the executable launcher.
// If left undefined, will use ${assembler.name}.
// icon:dot-circle[]
"executable": "app",
// Directory with file templates used to prepare the Jlink assembler.
// Defaults to `src/jreleaser/assemblers/${distribution.name}/jlink`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/jlink/templates",
// Name of the generated image.
// If left undefined, will use
// ${project.java.groupId}.${project.java.artifactId}.${project.version}.
// icon:dot-circle[] icon:file-alt[]
"imageName": "app",
// Name of main module (if any).
// Define only if the application is modular.
// icon:dot-circle[]
"moduleName": "com.acme.demo",
// List of module names.
// Define only if jdeps can't find all required modules.
// icon:dot-circle[]
"moduleNames": [
"java.base",
"com.acme.demo"
],
// List of JDKs for generating cross-platform images.
// icon:dot-circle[] icon:file-alt[]
"targetJdks": [
{
"path": "path/to/jdk",
"platform": "osx"
},
{
"path": "path/to/jdk",
"platform": "linux"
}
],
// The JDK to use.
// If undefined, will use the current JDK running JReleaser.
// icon:exclamation-triangle[] icon:file-alt[]
"jdk": {
"path": "path/to/jdk",
"platform": "linux"
},
// A list of build arguments.
// Defualts are shown.
// icon:dot-circle[]
"args": [
"--no-header-files",
"--no-man-pages",
"--compress=2",
"--strip-debug"
],
// The executable JAR that contains the application.
// icon:exclamation-triangle[] icon:file-alt[]
"mainJar": {
"path": "path/to/app.jar"
},
// Defines a list of additional JARs as globs.
// icon:dot-circle[]
"jars": [
{
// The directory to search.
// If undefined, will use the project's basedir.
// icon:dot-circle[] icon:file-alt[]
"directory": "some/directory",
// The pattern to apply for inclusion.
// If undefined, will use `*`.
// icon:dot-circle[]
"include": "*.jar",
// The pattern to apply for exclusion.
// icon:dot-circle[]
"exclude": "secret",
// Recursive search.
// Defaults to `false`.
// icon:dot-circle[]
"recursive": true
}
],
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
"foo": "bar"
},
// icon:dot-circle[]
"java": {
// Maven coordinates: groupId.
// If left undefined, will use ${project.java.groupId}.
// icon:dot-circle[]
"groupId": "com.acme",
// Maven coordinates: artifactId.
// If left undefined, will use ${project.java.artifactId}.
// icon:dot-circle[]
"artifactId": "app",
// The minimum Java version required by consumers to run the application.
// If left undefined, will use ${project.java.version}.
// icon:dot-circle[]
"version": "8",
// The application's entry point.
// If left undefined, will use ${project.java.mainClass}.
// icon:dot-circle[]
"mainClass": "com.acme.Main",
// Identifies the project as being member of a multi-project build.
// If left undefined, will use ${project.java.multiProject}.
// icon:dot-circle[]
"multiProject": false,
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
"foo": "bar"
}
}
}
}
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim"]
----
<jreleaser>
<assemble>
<!--
icon:dot-circle[]
-->
<jlink>
<!--
Assemblers require a name.
icon:exclamation-triangle[]
-->
<app>
<!--
Enables or disables the distribution.
Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
Defaults to `ALWAYS`.
icon:dot-circle[]
-->
<active>ALWAYS</active>
<!--
The distribution type.
Used to determine packager templates.
Supported values are>[JAVA_BINARY].
icon:exclamation-triangle[]
-->
<type>JAVA_BINARY</type>
<!--
Name of the executable launcher.
If left undefined, will use ${distribution.name}.
icon:dot-circle[]
-->
<executable>app</executable>
<!--
Directory with file templates used to prepare the Jlink assembler.
Defaults to `src/jreleaser/assemblers/${distribution.name}/jlink`.
If specified, path must exist.
icon:dot-circle[]
-->
<templateDirectory>>path/to/brew/templates</templateDirectory>
<!--
Name of the generated image.
If left undefined, will use
${project.java.groupId}.${project.java.artifactId}.${project.version}.
icon:dot-circle[] icon:file-alt[]
-->
<imageName>app</imageName>
<!--
Name of main module (if any).
Define only if the application is modular.
icon:dot-circle[]
-->
<moduleName>com.acme.demo</moduleName>
<!--
List of module names.
Define only if jdeps can't find all required modules.
icon:dot-circle[]
-->
<moduleNames>
<moduleName>java.base</moduleName>
<moduleName>com.acme.demo</moduleName>
</moduleNames>
<!--
List of JDKs for generating cross-platform images.
icon:dot-circle[] icon:file-alt[]
-->
<targetJdks>
<targetJdk>
<path>path/to/jdk</path>
<platform>osx</platform>
</targetJdk>
<targetJdk>
<path>path/to/jdk</path>
<platform>linux</platform>
</targetJdk>
</targetJdks>
<!--
The JDK to use.
If undefined, will use the current JDK running JReleaser.
icon:exclamation-triangle[] icon:file-alt[]
-->
<jdk>
<path>path/to/jdk</path>
<platform>linux</platform>
</jdk>
<!--
The executable JAR that contains the application.
icon:exclamation-triangle[] icon:file-alt[]
-->
<mainJar>
<path>path/to/app.jar</path>
</mainJar>
<!--
A list of build arguments.
Defaults are shown.
icon:dot-circle[]
-->
<args>
<arg>--no-header-files</arg>
<arg>--no-man-pages</arg>
<arg>--compress=2</arg>
<arg>--strip-debug</arg>
</args>
<!--
Defines a list of additional JARs as globs.
icon:dot-circle[]
-->
<jars>
<jar>
<!--
The directory to search.
If undefined, will use the project's basedir.
icon:dot-circle[] icon:file-alt[]
-->
<directory>some/directory</directory>
<!--
The pattern to apply for inclusion.
If undefined, will use `*`.
icon:dot-circle[]
-->
<include>*.jar</include>
<!--
The pattern to apply for exclusion.
icon:dot-circle[]
-->
<exclude>secret</exclude>
<!--
Recursive search.
Defaults to `false`.
icon:dot-circle[]
-->
<recursive>true</recursive>
</jar>
</jars>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
-->
<foo>bar</foo>
</extraProperties>
<!--
icon:dot-circle[]
-->
<java>
<!--
Maven coordinates>groupId.
If left undefined, will use ${project.java.groupId}.
icon:dot-circle[]
-->
<groupId>com.acme</groupId>
<!--
Maven coordinates>artifactId.
If left undefined, will use ${project.java.artifactId}.
icon:dot-circle[]
-->
<artifactId>app</artifactId>
<!--
The minimum Java version required by consumers to run the application.
If left undefined, will use ${project.java.version}.
icon:dot-circle[]
-->
<version>8</version>
<!--
The application's entry point.
If left undefined, will use ${project.java.mainClass}.
icon:dot-circle[]
-->
<mainClass>com.acme.Main</mainClass>
<!--
Identifies the project as being member of a multi-project build.
If left undefined, will use ${project.java.multiProject}.
icon:dot-circle[]
-->
<multiProject>false</multiProject>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
-->
<foo>bar</foo>
</extraProperties>
</java>
</app>
</jlink>
</assemble>
</jreleaser>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
jreleaser {
// icon:dot-circle[]
assemble {
// icon:dot-circle[]
jlink {
// Assemblers require a name.
// icon:exclamation-triangle[]
app {
// Enables or disables the assembler.
// Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
// icon:dot-circle[]
active = 'ALWAYS'
// Name of the executable launcher.
// If left undefined, will use ${assembler.name}.
// icon:dot-circle[]
executable = 'app'
// Directory with file templates used to prepare the Jlink assembler.
// Defaults to `src/jreleaser/assemblers/${distribution.name}/jlink`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/jlink/templates'
// Name of the generated image.
// If left undefined, will use
// ${project.java.groupId}.${project.java.artifactId}.${project.version}.
// icon:dot-circle[] icon:file-alt[]
imageName = 'app'
// Name of main module (if any).
// Define only if the application is modular.
// icon:dot-circle[]
moduleName = 'com.acme.demo'
// List of module names.
// Define only if jdeps can't find all required modules.
// icon:dot-circle[]
moduleNames = [
'java.base',
'com.acme.demo'
]
// List of JDKs for generating cross-platform images.
// icon:dot-circle[] icon:file-alt[]
targetJdk {
pat = 'path/to/jdk'
platform = 'osx'
}
targetJdk {
pat = 'path/to/jdk'
platform = 'linux'
}
// The JDK to use.
// If undefined, will use the current JDK running JReleaser.
// icon:exclamation-triangle[] icon:file-alt[]
jdk {
path = 'path/to/jdk'
platform = 'linux'
}
// A list of build arguments.
// Defaults are shown.
// icon:dot-circle[]
addArg('--install-exit-handlers')
addArg('--no-header-files')
addArg('--no-man-pages')
addArg('--compress=2')
addArg('--strip-debug')
// The executable JAR that contains the application.
// icon:exclamation-triangle[] icon:file-alt[]
mainJar {
path = 'path/to/app.jar'
}
// Defines a list of additional JARs as globs.
// icon:dot-circle[]
jars {
// The directory to search.
// If undefined, will use the project's basedir.
// icon:dot-circle[] icon:file-alt[]
directory = 'some/directory'
// The pattern to apply for inclusion.
// If undefined, will use `*`.
// icon:dot-circle[]
include = '*.jar'
// The pattern to apply for exclusion.
// icon:dot-circle[]
exclude = 'secret'
// Recursive search.
// Defaults to `false`.
// icon:dot-circle[]
recursive = true
}
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
// icon:dot-circle[]
java {
// Maven coordinates = groupId.
// If left undefined, will use ${project.java.groupId}.
// icon:dot-circle[]
groupI = 'com.acme'
// Maven coordinates = artifactId.
// If left undefined, will use ${project.java.artifactId}.
// icon:dot-circle[]
artifactId = 'app'
// The minimum Java version required by consumers to run the application.
// If left undefined, will use ${project.java.version}.
// icon:dot-circle[]
version = '8'
// The application's entry point.
// If left undefined, will use ${project.java.mainClass}.
// icon:dot-circle[]
mainClass = 'com.acme.Main'
// Identifies the project as being member of a multi-project build.
// If left undefined, will use ${project.java.multiProject}.
// icon:dot-circle[]
multiProject = false
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
}
}
}
}
}
----
====

View File

@@ -0,0 +1,627 @@
= Native Image
Creates a Native Image binary using link:https://www.graalvm.org/reference-manual/native-image/[GraalVM Native Image].
IMPORTANT: You need a local installation of GraalVM. JReleaser will *not* install GraalVM for you, however it can
install the `native-image` command if needed.
include::partial$legend.adoc[]
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
# icon:dot-circle[]
assemble:
# icon:dot-circle[]
nativeImage:
# Assemblers require a name.
# icon:exclamation-triangle[]
app:
# Enables or disables the assembler.
# Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
# icon:dot-circle[]
active: ALWAYS
# Name of the executable launcher.
# If left undefined, will use ${assembler.name}.
# icon:dot-circle[]
executable: app
# Directory with file templates used to prepare the NativeImage assembler.
# Defaults to `src/jreleaser/assemblers/${distribution.name}/nativeImage`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/nativeImage/templates
# The GraalVM JDK to use.
# icon:exclamation-triangle[] icon:file-alt[]
graal:
path: path/to/graalvm
# A list of build arguments.
# The `-H:Name` argument will always be replaced with the
# value of $executable.
# icon:dot-circle[]
args:
- "--install-exit-handlers"
# The executable JAR that contains the application.
# icon:exclamation-triangle[] icon:file-alt[]
mainJar:
path: path/to/app.jar
# Defines a list of additional JARs as globs.
# icon:dot-circle[]
jars:
# The directory to search.
# If undefined, will use the project's basedir.
# icon:dot-circle[] icon:file-alt[]
- directory: some/directory
# The pattern to apply for inclusion.
# If undefined, will use `*`.
# icon:dot-circle[]
include: '*.jar'
# The pattern to apply for exclusion.
# icon:dot-circle[]
exclude: 'secret'
# Recursive search.
# Defaults to `false`.
# icon:dot-circle[]
recursive: true
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties:
# Key will be capitalized and prefixed with `nativeImage`, i.e, `nativeImageFoo`.
foo: bar
# icon:dot-circle[]
java:
# Maven coordinates: groupId.
# If left undefined, will use ${project.java.groupId}.
# icon:dot-circle[]
groupId: com.acme
# Maven coordinates: artifactId.
# If left undefined, will use ${project.java.artifactId}.
# icon:dot-circle[]
artifactId: app
# The minimum Java version required by consumers to run the application.
# If left undefined, will use ${project.java.version}.
# icon:dot-circle[]
version: 8
# The application's entry point.
# If left undefined, will use ${project.java.mainClass}.
# icon:dot-circle[]
mainClass: com.acme.Main
# Identifies the project as being member of a multi-project build.
# If left undefined, will use ${project.java.multiProject}.
# icon:dot-circle[]
multiProject: false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties:
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
foo: bar
----
TOML::
+
[source,toml]
[subs="+macros"]
----
# Assemblers require a name.
# icon:exclamation-triangle[]
[assemble.nativeImage.app]
# Enables or disables the assembler.
# Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
# icon:dot-circle[]
active = "ALWAYS"
# Name of the executable launcher.
# If left undefined, will use ${assembler.name}.
# icon:dot-circle[]
executable = "app"
# Directory with file templates used to prepare the NativeImage assembler.
# Defaults to `src/jreleaser/assemblers/${distribution.name}/nativeImage`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/nativeImage/templates"
# The GraalVM JDK to use.
# icon:exclamation-triangle[] icon:file-alt[]
graal = { path = "path/to/graalvm" }
# A list of build arguments.
# The `-H:Name` argument will always be replaced with the
# value of $executable.
# icon:dot-circle[]
args = ["--install-exit-handlers"]
# The executable JAR that contains the application.
# icon:exclamation-triangle[] icon:file-alt[]
mainJar = { path = "path/to/app.jar" }
# Defines a list of additional JARs as globs.
# icon:dot-circle[]
pass:[[[assemble.nativeImage.app.jars]]]
# The directory to search.
# If undefined, will use the project's basedir.
# icon:dot-circle[] icon:file-alt[]
directory = "some/directory"
# The pattern to apply for inclusion.
# If undefined, will use `*`.
# icon:dot-circle[]
include = "*.jar"
# The pattern to apply for exclusion.
# icon:dot-circle[]
exclude = "secret"
# Recursive search.
# Defaults to `false`.
# icon:dot-circle[]
recursive = true
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `nativeImage`, i.e, `nativeImageFoo`.
# Maven coordinates: groupId.
# If left undefined, will use ${project.java.groupId}.
# icon:dot-circle[]
java.groupId = "com.acme"
# Maven coordinates: artifactId.
# If left undefined, will use ${project.java.artifactId}.
# icon:dot-circle[]
java.artifactId = "app"
# The minimum Java version required by consumers to run the application.
# If left undefined, will use ${project.java.version}.
# icon:dot-circle[]
java.version = "8"
# The application's entry point.
# If left undefined, will use ${project.java.mainClass}.
# icon:dot-circle[]
java.mainClass = "com.acme.Main"
# Identifies the project as being member of a multi-project build.
# If left undefined, will use ${project.java.multiProject}.
# icon:dot-circle[]
java.multiProject = false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
java.extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
// icon:dot-circle[]
"assemble": {
// icon:dot-circle[]
"nativeImage": {
// Assemblers require a name.
// icon:exclamation-triangle[]
"app": {
// Enables or disables the assembler.
// Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
// icon:dot-circle[]
"active": "ALWAYS",
// Name of the executable launcher.
// If left undefined, will use ${assembler.name}.
// icon:dot-circle[]
"executable": "app",
// Directory with file templates used to prepare the NativeImage assembler.
// Defaults to `src/jreleaser/assemblers/${distribution.name}/nativeImage`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/nativeImage/templates",
// The GraalVM JDK to use.
// icon:exclamation-triangle[] icon:file-alt[]
"graal": {
"path": "path/to/graalvm"
},
// A list of build arguments.
// The `-H:Name` argument will always be replaced with the
// value of $executable.
// icon:dot-circle[]
"args": [
"--install-exit-handlers"
],
// The executable JAR that contains the application.
// icon:exclamation-triangle[] icon:file-alt[]
"mainJar": {
"path": "path/to/app.jar"
},
// Defines a list of additional JARs as globs.
// icon:dot-circle[]
"jars": [
{
// The directory to search.
// If undefined, will use the project's basedir.
// icon:dot-circle[] icon:file-alt[]
"directory": "some/directory",
// The pattern to apply for inclusion.
// If undefined, will use `*`.
// icon:dot-circle[]
"include": "*.jar",
// The pattern to apply for exclusion.
// icon:dot-circle[]
"exclude": "secret",
// Recursive search.
// Defaults to `false`.
// icon:dot-circle[]
"recursive": true
}
],
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `nativeImage`, i.e, `nativeImageFoo`.
"foo": "bar"
},
// icon:dot-circle[]
"java": {
// Maven coordinates: groupId.
// If left undefined, will use ${project.java.groupId}.
// icon:dot-circle[]
"groupId": "com.acme",
// Maven coordinates: artifactId.
// If left undefined, will use ${project.java.artifactId}.
// icon:dot-circle[]
"artifactId": "app",
// The minimum Java version required by consumers to run the application.
// If left undefined, will use ${project.java.version}.
// icon:dot-circle[]
"version": "8",
// The application's entry point.
// If left undefined, will use ${project.java.mainClass}.
// icon:dot-circle[]
"mainClass": "com.acme.Main",
// Identifies the project as being member of a multi-project build.
// If left undefined, will use ${project.java.multiProject}.
// icon:dot-circle[]
"multiProject": false,
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
"foo": "bar"
}
}
}
}
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim"]
----
<jreleaser>
<assemble>
<!--
icon:dot-circle[]
-->
<nativeImage>
<!--
Assemblers require a name.
icon:exclamation-triangle[]
-->
<app>
<!--
Enables or disables the distribution.
Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
Defaults to `ALWAYS`.
icon:dot-circle[]
-->
<active>ALWAYS</active>
<!--
The distribution type.
Used to determine packager templates.
Supported values are>[JAVA_BINARY].
icon:exclamation-triangle[]
-->
<type>JAVA_BINARY</type>
<!--
Name of the executable launcher.
If left undefined, will use ${distribution.name}.
icon:dot-circle[]
-->
<executable>app</executable>
<!--
Directory with file templates used to prepare the NativeImage assembler.
Defaults to `src/jreleaser/assemblers/${distribution.name}/nativeImage`.
If specified, path must exist.
icon:dot-circle[]
-->
<templateDirectory>>path/to/brew/templates</templateDirectory>
<!--
The GraalVM JDK to use.
icon:exclamation-triangle[] icon:file-alt[]
-->
<graal>
<path>path/to/graalvm</path>
</graal>
<!--
The executable JAR that contains the application.
icon:exclamation-triangle[] icon:file-alt[]
-->
<mainJar>
<path>path/to/app.jar</path>
</mainJar>
<!--
A list of build arguments.
The `-H =Name` argument will always be replaced with the
value of $executable.
icon:dot-circle[]
-->
<args>
<arg>--install-exit-handlers</arg>
</args>
<!--
Defines a list of additional JARs as globs.
icon:dot-circle[]
-->
<jars>
<jar>
<!--
The directory to search.
If undefined, will use the project's basedir.
icon:dot-circle[] icon:file-alt[]
-->
<directory>some/directory</directory>
<!--
The pattern to apply for inclusion.
If undefined, will use `*`.
icon:dot-circle[]
-->
<include>*.jar</include>
<!--
The pattern to apply for exclusion.
icon:dot-circle[]
-->
<exclude>secret</exclude>
<!--
Recursive search.
Defaults to `false`.
icon:dot-circle[]
-->
<recursive>true</recursive>
</jar>
</jars>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `nativeImage`, i.e, `nativeImageFoo`.
-->
<foo>bar</foo>
</extraProperties>
<!--
icon:dot-circle[]
-->
<java>
<!--
Maven coordinates>groupId.
If left undefined, will use ${project.java.groupId}.
icon:dot-circle[]
-->
<groupId>com.acme</groupId>
<!--
Maven coordinates>artifactId.
If left undefined, will use ${project.java.artifactId}.
icon:dot-circle[]
-->
<artifactId>app</artifactId>
<!--
The minimum Java version required by consumers to run the application.
If left undefined, will use ${project.java.version}.
icon:dot-circle[]
-->
<version>8</version>
<!--
The application's entry point.
If left undefined, will use ${project.java.mainClass}.
icon:dot-circle[]
-->
<mainClass>com.acme.Main</mainClass>
<!--
Identifies the project as being member of a multi-project build.
If left undefined, will use ${project.java.multiProject}.
icon:dot-circle[]
-->
<multiProject>false</multiProject>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
-->
<foo>bar</foo>
</extraProperties>
</java>
</app>
</nativeImage>
</assemble>
</jreleaser>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
jreleaser {
// icon:dot-circle[]
assemble {
// icon:dot-circle[]
nativeImage {
// Assemblers require a name.
// icon:exclamation-triangle[]
app {
// Enables or disables the assembler.
// Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
// icon:dot-circle[]
active = 'ALWAYS'
// Name of the executable launcher.
// If left undefined, will use ${assembler.name}.
// icon:dot-circle[]
executable = 'app'
// Directory with file templates used to prepare the NativeImage assembler.
// Defaults to `src/jreleaser/assemblers/${distribution.name}/nativeImage`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/nativeImage/templates'
// The GraalVM JDK to use.
// icon:exclamation-triangle[] icon:file-alt[]
graal {
path = 'path/to/graalvm'
}
// A list of build arguments.
// The `-H =Name` argument will always be replaced with the
// value of $executable.
// icon:dot-circle[]
addArg('--install-exit-handlers')
// The executable JAR that contains the application.
// icon:exclamation-triangle[] icon:file-alt[]
mainJar {
path = 'path/to/app.jar'
}
// Defines a list of additional JARs as globs.
// icon:dot-circle[]
jars {
// The directory to search.
// If undefined, will use the project's basedir.
// icon:dot-circle[] icon:file-alt[]
directory = 'some/directory'
// The pattern to apply for inclusion.
// If undefined, will use `*`.
// icon:dot-circle[]
include = '*.jar'
// The pattern to apply for exclusion.
// icon:dot-circle[]
exclude = 'secret'
// Recursive search.
// Defaults to `false`.
// icon:dot-circle[]
recursive = true
}
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `nativeImage`, i.e, `nativeImageFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
// icon:dot-circle[]
java {
// Maven coordinates = groupId.
// If left undefined, will use ${project.java.groupId}.
// icon:dot-circle[]
groupI = 'com.acme'
// Maven coordinates = artifactId.
// If left undefined, will use ${project.java.artifactId}.
// icon:dot-circle[]
artifactId = 'app'
// The minimum Java version required by consumers to run the application.
// If left undefined, will use ${project.java.version}.
// icon:dot-circle[]
version = '8'
// The application's entry point.
// If left undefined, will use ${project.java.mainClass}.
// icon:dot-circle[]
mainClass = 'com.acme.Main'
// Identifies the project as being member of a multi-project build.
// If left undefined, will use ${project.java.multiProject}.
// icon:dot-circle[]
multiProject = false
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
}
}
}
}
}
----
====

View File

@@ -53,7 +53,7 @@ distributions:
foo: bar
# A list of artifacts.
# At least on entry must be present
# At least on entry must be present.
# icon:exclamation-triangle[] icon:file-alt[]
artifacts:
- path: path/to/{{distributionName}}-{{projectVersion}}.zip
@@ -88,6 +88,12 @@ distributions:
# If left undefined, will use ${project.java.multiProject}.
# icon:dot-circle[]
multiProject: false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties:
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
foo: bar
----
TOML::
+
@@ -125,7 +131,7 @@ TOML::
# Key will be capitalized and prefixed with `distribution`, i.e, `distributionFoo`.
# A list of artifacts.
# At least on entry must be present
# At least on entry must be present.
# icon:exclamation-triangle[] icon:file-alt[]
artifacts = [
{ path = "path/to/{{distributionName}}-{{projectVersion}}.zip" },
@@ -157,6 +163,11 @@ TOML::
# If left undefined, will use ${project.java.multiProject}.
# icon:dot-circle[]
java.multiProject = false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
java.extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
----
JSON::
+
@@ -197,12 +208,12 @@ JSON::
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `$distribution`, i.e, `$distributionFoo`.
// Key will be capitalized and prefixed with `distribution`, i.e, `distributionFoo`.
"foo": "bar"
},
// A list of artifacts.
// At least on entry must be present
// At least on entry must be present.
// icon:exclamation-triangle[] icon:file-alt[]
"artifacts": [
{
@@ -243,7 +254,14 @@ JSON::
// Identifies the project as being member of a multi-project build.
// If left undefined, will use ${project.java.multiProject}.
// icon:dot-circle[]
"multiProject": false
"multiProject": false,
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
"foo": "bar"
}
}
}
}
@@ -303,14 +321,14 @@ Maven::
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `project`, i.e, `projectFoo`.
Key will be capitalized and prefixed with `distribution`, i.e, `distributionFoo`.
-->
<foo>bar</foo>
</extraProperties>
<!--
A list of artifacts.
At least on entry must be present
At least on entry must be present.
icon:exclamation-triangle[] icon:file-alt[]
-->
<artifacts>
@@ -365,6 +383,17 @@ Maven::
icon:dot-circle[]
-->
<multiProject>false</multiProject>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
-->
<foo>bar</foo>
</extraProperties>
</java>
</app>
</distributions>
@@ -404,12 +433,12 @@ jreleaser {
tags = ['cli', 'awesome']
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `$distribution`, i.e, `$distributionFoo`.
// Key will be capitalized and prefixed with `distribution`, i.e, `distributionFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
// A list of artifacts.
// At least on entry must be present
// At least on entry must be present.
// icon:exclamation-triangle[] icon:file-alt[]
artifacts {
artifact {
@@ -451,6 +480,11 @@ jreleaser {
// If left undefined, will use ${project.java.multiProject}.
// icon:dot-circle[]
multiProject = false
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
}
}
}

View File

@@ -26,6 +26,11 @@ environment:
# the environment variable it overrides.
# icon:dot-circle[]
variables: path/to/alternate/config.properties
# Additional properties used when evaluating templates.
# icon:dot-circle[]
properties:
foo: bar
----
TOML::
+
@@ -41,6 +46,10 @@ TOML::
# the environment variable it overrides.
# icon:dot-circle[]
variables = "path/to/alternate/config.properties"
# Additional properties used when evaluating templates.
# icon:dot-circle[]
properties.foo = "bar"
----
JSON::
+
@@ -55,7 +64,13 @@ JSON::
// Each key must be prefixed with `JRELEASER_` and match
// the environment variable it overrides.
// icon:dot-circle[]
"variables": "path/to/alternate/config.properties"
"variables": "path/to/alternate/config.properties",
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"properties": {
"foo": "bar"
}
}
}
----
@@ -77,6 +92,14 @@ Maven::
icon:dot-circle[]
-->
<variables>path/to/alternate/config.properties</variables>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<properties>
<foo>bar</foo>
</properties>
</environment>
</jreleaser>
----
@@ -94,11 +117,17 @@ jreleaser {
// the environment variable it overrides.
// icon:dot-circle[]
variables = 'path/to/alternate/config.properties'
// Additional properties used when evaluating templates.
// icon:dot-circle[]
properties.put('foo', 'bar')
}
}
----
====
The following key/values may be defined in the properties file or as environment variables:
== Project
[%header, cols="<1,<1", width="100%"]

View File

@@ -29,14 +29,17 @@ files:
# The directory to search.
# If undefined, will use the project's basedir.
# icon:dot-circle[] icon:file-alt[]
- directory: some/directory
- directory: some/directory\
# The pattern to apply for inclusion.
# If undefined, will use `*`.
# icon:dot-circle[]
include: '*.txt'
# The pattern to apply for exclusion.
# icon:dot-circle[]
exclude: 'secret'
# Recursive search.
# Defaults to `false`.
# icon:dot-circle[]
@@ -66,13 +69,16 @@ TOML::
# If undefined, will use the project's basedir.
# icon:dot-circle[] icon:file-alt[]
directory = "some/directory"
# The pattern to apply for inclusion.
# If undefined, will use `*`.
# icon:dot-circle[]
include = "*.txt"
# The pattern to apply for exclusion.
# icon:dot-circle[]
exclude = "secret"
# Recursive search.
# Defaults to `false`.
# icon:dot-circle[]

View File

@@ -11,6 +11,68 @@ The following is a list of pre-defined template names:
All environment variables are accessible with the `Env.` prefix, for example an environment variable named `JAVA_OPTS`
becomes `{{Env.JAVA_OPTS}}`.
Additionally, every key/value from `environment.properties` becomes available
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
environment:
properties:
foo: bar
----
TOML::
+
[source,toml]
[subs="+macros"]
----
[environment]
properties.foo = "bar"
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
"environment": {
"properties": {
"foo": "bar"
}
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim"]
----
<jreleaser>
<environment>
<properties>
<foo>bar</foo>
</properties>
</environment>
</jreleaser>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
jreleaser {
environment {
properties.put('foo', 'bar')
}
}
----
====
The key `foo` becomes `{{foo}}` and will be evaluated to the String `bar`.
== Build
The following names are related to the current build
@@ -130,6 +192,86 @@ jreleaser {
----
====
Additionally, every key/value from `project.java.extraProperties` is mapped with `java` as key prefix and the capitalized
key, such that
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
project:
java:
extraProperties:
# Key will be capitalized and prefixed
# with `java`, i.e, `javaFoo`.
foo: bar
----
TOML::
+
[source,toml]
[subs="+macros"]
----
[project]
# Key will be capitalized and prefixed
# with `java`, i.e, `javaFoo`.
java.extraProperties.foo = "bar"
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
"project": {
"java": {
"extraProperties": {
// Key will be capitalized and prefixed
// with `java`, i.e, `javaFoo`.
"foo": "bar"
}
}
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim"]
----
<jreleaser>
<project>
<java>
<extraProperties>
<!--
Key will be capitalized and prefixed
with `java`, i.e, `javaFoo`.
-->
<foo>bar</foo>
</extraProperties>
</java>
</project>
</jreleaser>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
jreleaser {
project {
java {
// Key will be capitalized and prefixed
// with `java`, i.e, `javaFoo`.
extraProperties.put('foo', 'bar')
}
}
}
----
====
== Release
The following names are related to xref:configuration:release/index.adoc[]
@@ -256,6 +398,93 @@ jreleaser {
----
====
Additionally, every key/value from `distribution.<name>.java.extraProperties` is mapped with `java` as key prefix
and the capitalized key, such that
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
distributions:
app:
java:
extraProperties:
# Key will be capitalized and prefixed
# with `java`, i.e, `javaFoo`.
foo: bar
----
TOML::
+
[source,toml]
[subs="+macros"]
----
[distributions.app]
# Key will be capitalized and prefixed
# with `java`, i.e, `javaFoo`.
java.extraProperties.foo = "bar"
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
"distributions": {
"app": {
"java": {
"extraProperties": {
// Key will be capitalized and prefixed
// with `java`, i.e, `javaFoo`.
"foo": "bar"
}
}
}
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim"]
----
<jreleaser>
<distributions>
<app>
<java>
<extraProperties>
<!--
Key will be capitalized and prefixed
with `java`, i.e, `javaFoo`.
-->
<foo>bar</foo>
</extraProperties>
</java>
</app>
</distributions>
</jreleaser>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
jreleaser {
distributions {
app {
java {
// Key will be capitalized and prefixed
// with `java`, i.e, `javaFoo`.
extraProperties.put('foo', 'bar')
}
}
}
}
----
====
== Artifact
The following names identify an artifact without explicit `platform`
@@ -266,16 +495,18 @@ The following names identify an artifact without explicit `platform`
| artifactUrl | the URL required to download the artifact
| artifactSha256 | the SHA256 checksum of the artifact's file
| artifactFileName | the name of the artifact file
| artifactName | the name of the artifact file without extension
|===
The following names match the first artifact in a distribution
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| distributionUrl | the URL required to download the artifact
| distributionSha256 | the SHA256 checksum of the artifact's file
| distributionFileName | the name of the artifact file
| Key | Description
| distributionUrl | the URL required to download the artifact
| distributionSha256 | the SHA256 checksum of the artifact's file
| distributionArtifactFileName | the name of the artifact file
| distributionArtifactName | the name of the artifact file without extension
|===
Additional names become available when the artifact defines a `platform`
@@ -286,6 +517,7 @@ Additional names become available when the artifact defines a `platform`
| artifact{{CapitalizedPlatform}}Url | the URL required to download the artifact
| artifact{{CapitalizedPlatform}}Sha256 | the SHA256 checksum of the artifact's file
| artifact{{CapitalizedPlatform}}FileName | the name of the artifact file
| artifact{{CapitalizedPlatform}}Name | the name of the artifact file without extension
|===
Thus, for artifacts defined as
@@ -386,16 +618,19 @@ The following names will be calculated:
* artifactUrl
* artifactSha256
* artifactFileName
* artifactFileName: `${project.name}-${project.version}.zip`
* artifactName: `${project.name}-${project.version}`
* distributionUrl
* distributionSha256
* distributionFileName
* distributionArtifactFileName: `${project.name}-${project.version}.zip`
* distributionArtifactName: `${project.name}-${project.version}`
*Platform specific artifact*
* artifactOsxUrl
* artifactOsxSha256
* artifactOsxFileName
* artifactOsxFileName: `${project.name}-${project.version}-mac.zip`
* artifactOsxName: `${project.name}-${project.version}-mac`
== Brew

View File

@@ -28,8 +28,8 @@ packagers:
# icon:dot-circle[]
active: ALWAYS
# Directory with file templates used to prepare the Chocolatey distribution
# Defaults to `src/distribution/${distribution.name}/chocolatey`.
# Directory with file templates used to prepare the Chocolatey distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/chocolatey/templates
@@ -102,8 +102,8 @@ TOML::
# icon:dot-circle[]
active = "ALWAYS"
# Directory with file templates used to prepare the Chocolatey distribution
# Defaults to `src/distribution/${distribution.name}/chocolatey`.
# Directory with file templates used to prepare the Chocolatey distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/chocolatey/templates"
@@ -175,8 +175,8 @@ JSON::
// icon:dot-circle[]
"active": "ALWAYS",
// Directory with file templates used to prepare the Chocolatey distribution
// Defaults to `src/distribution/${distribution.name}/chocolatey`.
// Directory with file templates used to prepare the Chocolatey distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/chocolatey/templates",
@@ -265,8 +265,8 @@ Maven::
<active>ALWAYS</active>
<!--
Directory with file templates used to prepare the Chocolatey distribution
Defaults to `src/distribution/${distribution.name}/chocolatey`.
Directory with file templates used to prepare the Chocolatey distribution.
Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
If specified, path must exist.
icon:dot-circle[]
-->
@@ -374,8 +374,8 @@ jreleaser {
// icon:dot-circle[]
active = 'ALWAYS'
// Directory with file templates used to prepare the Chocolatey distribution
// Defaults to `src/distribution/${distribution.name}/chocolatey`.
// Directory with file templates used to prepare the Chocolatey distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/chocolatey/templates'

View File

@@ -28,8 +28,8 @@ packagers:
# icon:dot-circle[]
active: ALWAYS
# Directory with file templates used to prepare the Docker distribution
# Defaults to `src/distribution/${distribution.name}/docker`.
# Directory with file templates used to prepare the Docker distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/docker`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/docker/templates
@@ -46,11 +46,22 @@ packagers:
- "{{repoOwner}}/{{distributionName}}:{{tagName}}"
- "duke/app:latest"
# A list of build arguments
# A list of build arguments.
# icon:dot-circle[] icon:file-alt[]
buildArgs:
- "--pull"
# Dockerfile commands to run before the assembly.
# icon:dot-circle[] icon:file-alt[]
preCommands:
- "RUN apt-get update -y"
- "RUN apt-get install unzip"
# Dockerfile commands to run after the assembly, before ENTRYPOINT.
# icon:dot-circle[] icon:file-alt[]
postCommands:
- "VOLUME /workspace"
# A map of Docker labels.
# icon:dot-circle[]
labels:
@@ -106,8 +117,8 @@ TOML::
# icon:dot-circle[]
active = "ALWAYS"
# Directory with file templates used to prepare the Docker distribution
# Defaults to `src/distribution/${distribution.name}/docker`.
# Directory with file templates used to prepare the Docker distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/docker`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/docker/templates"
@@ -124,10 +135,20 @@ TOML::
"{{repoOwner}}/{{distributionName}}:{{tagName}}",
"duke/app:latest"]
# A list of build arguments
# A list of build arguments.
# icon:dot-circle[] icon:file-alt[]
buildArgs = ["--pull"]
# Dockerfile commands to run before the assembly.
# icon:dot-circle[] icon:file-alt[]
preCommands = [
"RUN apt-get update -y",
"RUN apt-get install unzip"]
# Dockerfile commands to run after the assembly, before ENTRYPOINT.
# icon:dot-circle[] icon:file-alt[]
postCommands = ["VOLUME /workspace"]
# A map of Docker labels.
# icon:dot-circle[]
labels.foo = "bar"
@@ -183,8 +204,8 @@ JSON::
// icon:dot-circle[]
"active": "ALWAYS",
// Directory with file templates used to prepare the Docker distribution
// Defaults to `src/distribution/${distribution.name}/docker`.
// Directory with file templates used to prepare the Docker distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/docker`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/docker/templates",
@@ -202,12 +223,25 @@ JSON::
"duke/app:latest"
],
// A list of build arguments
// A list of build arguments.
// icon:dot-circle[] icon:file-alt[]
"buildArgs": [
"--pull"
],
// Dockerfile commands to run before the assembly.
// icon:dot-circle[] icon:file-alt[]
"preCommands": [
"RUN apt-get update -y",
"RUN apt-get install unzip"
],
// Dockerfile commands to run after the assembly, before ENTRYPOINT.
// icon:dot-circle[] icon:file-alt[]
"postCommands": [
"VOLUME /workspace"
],
// A map of Docker labels.
// icon:dot-circle[]
"labels": {
@@ -281,8 +315,8 @@ Maven::
<active>ALWAYS</active>
<!--
Directory with file templates used to prepare the Docker distribution
Defaults to `src/distribution/${distribution.name}/docker`.
Directory with file templates used to prepare the Docker distribution.
Defaults to `src/jreleaser/distributions/${distribution.name}/docker`.
If specified, path must exist.
icon:dot-circle[]
-->
@@ -306,13 +340,30 @@ Maven::
</imageNames>
<!--
A list of build arguments
A list of build arguments.
icon:dot-circle[] icon:file-alt[]
-->
<buildArgs>
<buildArg>--pull</buildArg>
</buildArgs>
<!--
Dockerfile commands to run before the assembly.
icon:dot-circle[] icon:file-alt[]
-->
<preCommands>
<preCommand>RUN apt-get update -y</preCommand>
<preCommand>RUN apt-get install unzip</preCommand>
</preCommands>
<!--
Dockerfile commands to run after the assembly, before ENTRYPOINT.
icon:dot-circle[] icon:file-alt[]
-->
<postCommands>
<postCommand>VOLUME /workspace</postCommand>
</postCommands>
<!--
A map of Docker labels.
icon:dot-circle[]
@@ -396,8 +447,8 @@ jreleaser {
// icon:dot-circle[]
active = 'ALWAYS'
// Directory with file templates used to prepare the Docker distribution
// Defaults to `src/distribution/${distribution.name}/docker`.
// Directory with file templates used to prepare the Docker distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/docker`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/docker/templates'
@@ -413,10 +464,19 @@ jreleaser {
addImageName('{{repoOwner}}/{{distributionName}}:{{tagName}}')
addImageName('duke/app:latest')
// A list of build arguments
// A list of build arguments.
// icon:dot-circle[] icon:file-alt[]
addBuildArg('--pull')
// Dockerfile commands to run before the assembly.
// icon:dot-circle[] icon:file-alt[]
addPreCommand('RUN apt-get update -y')
addPreCommand('RUN apt-get install unzip')
// Dockerfile commands to run after the assembly, before ENTRYPOINT.
// icon:dot-circle[] icon:file-alt[]
addPostCommand('VOLUME /workspace')
// A map of Docker labels.
// The key `openjdk@${java.version}` will be added automatically if not defined.
// icon:dot-circle[]
@@ -483,12 +543,11 @@ COPY assembly/app-1.2.3.zip /app-1.2.3.zip
RUN unzip app-1.2.3.zip && \
rm app-1.2.3.zip && \
mv app-* app && \
chmod +x app/bin/app
chmod +x app-1.2.3/bin/app
ENV PATH="${PATH}:/app/bin"
ENV PATH="${PATH}:/app-1.2.3/bin"
ENTRYPOINT ["/app/bin/app"]
ENTRYPOINT ["/app-1.2.3/bin/app"]
----
== Default Labels

View File

@@ -27,8 +27,8 @@ packagers:
# icon:dot-circle[]
active: ALWAYS
# Directory with file templates used to prepare the Homebrew distribution
# Defaults to `src/distribution/${distribution.name}/brew`.
# Directory with file templates used to prepare the Homebrew distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/brew/templates
@@ -116,8 +116,8 @@ TOML::
# icon:dot-circle[]
active = "ALWAYS"
# Directory with file templates used to prepare the Homebrew distribution
# Defaults to `src/distribution/${distribution.name}/brew`.
# Directory with file templates used to prepare the Homebrew distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/brew/templates"
@@ -200,8 +200,8 @@ JSON::
// icon:dot-circle[]
"active": "ALWAYS",
// Directory with file templates used to prepare the Homebrew distribution
// Defaults to `src/distribution/${distribution.name}/brew`.
// Directory with file templates used to prepare the Homebrew distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/brew/templates",
@@ -306,8 +306,8 @@ Maven::
<active>ALWAYS</active>
<!--
Directory with file templates used to prepare the Homebrew distribution
Defaults to `src/distribution/${distribution.name}/brew`.
Directory with file templates used to prepare the Homebrew distribution.
Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
If specified, path must exist.
icon:dot-circle[]
-->
@@ -449,8 +449,8 @@ jreleaser {
// icon:dot-circle[]
active = 'ALWAYS'
// Directory with file templates used to prepare the Homebrew distribution
// Defaults to `src/distribution/${distribution.name}/brew`.
// Directory with file templates used to prepare the Homebrew distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/brew`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/brew/templates'

View File

@@ -27,8 +27,8 @@ packagers:
# icon:dot-circle[]
active: ALWAYS
# Directory with file templates used to prepare the Jbang distribution
# Defaults to `src/distribution/${distribution.name}/jbang`.
# Directory with file templates used to prepare the Jbang distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/jbang`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/jbang/templates
@@ -97,8 +97,8 @@ TOML::
# icon:dot-circle[]
active = "ALWAYS"
# Directory with file templates used to prepare the Jbang distribution
# Defaults to `src/distribution/${distribution.name}/jbang`.
# Directory with file templates used to prepare the Jbang distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/jbang`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/jbang/templates"
@@ -164,8 +164,8 @@ JSON::
// icon:dot-circle[]
"active": "ALWAYS",
// Directory with file templates used to prepare the Jbang distribution
// Defaults to `src/distribution/${distribution.name}/jbang`.
// Directory with file templates used to prepare the Jbang distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/jbang`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/jbang/templates",
@@ -249,8 +249,8 @@ Maven::
<active>ALWAYS</active>
<!--
Directory with file templates used to prepare the Jbang distribution
Defaults to `src/distribution/${distribution.name}/jbang`.
Directory with file templates used to prepare the Jbang distribution.
Defaults to `src/jreleaser/distributions/${distribution.name}/jbang`.
If specified, path must exist.
icon:dot-circle[]
-->
@@ -351,8 +351,8 @@ jreleaser {
// icon:dot-circle[]
active = 'ALWAYS'
// Directory with file templates used to prepare the Jbang distribution
// Defaults to `src/distribution/${distribution.name}/jbang`.
// Directory with file templates used to prepare the Jbang distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/jbang`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/jbang/templates'

View File

@@ -27,8 +27,8 @@ packagers:
# icon:dot-circle[]
active: ALWAYS
# Directory with file templates used to prepare the Scoop distribution
# Defaults to `src/distribution/${distribution.name}/scoop`.
# Directory with file templates used to prepare the Scoop distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/scoop`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/scoop/templates
@@ -101,8 +101,8 @@ TOML::
# icon:dot-circle[]
active = "ALWAYS"
# Directory with file templates used to prepare the Scoop distribution
# Defaults to `src/distribution/${distribution.name}/scoop`.
# Directory with file templates used to prepare the Scoop distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/scoop`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/scoop/templates"
@@ -173,8 +173,8 @@ JSON::
// icon:dot-circle[]
"active": "ALWAYS",
// Directory with file templates used to prepare the Scoop distribution
// Defaults to `src/distribution/${distribution.name}/scoop`.
// Directory with file templates used to prepare the Scoop distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/scoop`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/scoop/templates",
@@ -263,8 +263,8 @@ Maven::
<active>ALWAYS</active>
<!--
Directory with file templates used to prepare the Scoop distribution
Defaults to `src/distribution/${distribution.name}/scoop`.
Directory with file templates used to prepare the Scoop distribution.
Defaults to `src/jreleaser/distributions/${distribution.name}/scoop`.
If specified, path must exist.
icon:dot-circle[]
-->
@@ -372,8 +372,8 @@ jreleaser {
// icon:dot-circle[]
active = 'ALWAYS'
// Directory with file templates used to prepare the Scoop distribution
// Defaults to `src/distribution/${distribution.name}/scoop`.
// Directory with file templates used to prepare the Scoop distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/scoop`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/scoop/templates'

View File

@@ -32,8 +32,8 @@ packagers:
# icon:dot-circle[]
active: ALWAYS
# Directory with file templates used to prepare the Snap distribution
# Defaults to `src/distribution/${distribution.name}/snap`.
# Directory with file templates used to prepare the Snap distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/snap`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/snap/templates
@@ -175,8 +175,8 @@ TOML::
# icon:dot-circle[]
active = "ALWAYS"
# Directory with file templates used to prepare the Snap distribution
# Defaults to `src/distribution/${distribution.name}/snap`.
# Directory with file templates used to prepare the Snap distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/snap`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/snap/templates"
@@ -310,8 +310,8 @@ JSON::
// icon:dot-circle[]
"active": "ALWAYS",
// Directory with file templates used to prepare the Snap distribution
// Defaults to `src/distribution/${distribution.name}/snap`.
// Directory with file templates used to prepare the Snap distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/snap`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/snap/templates",
@@ -481,8 +481,8 @@ Maven::
<active>ALWAYS</active>
<!--
Directory with file templates used to prepare the Snap distribution
Defaults to `src/distribution/${distribution.name}/snap`.
Directory with file templates used to prepare the Snap distribution.
Defaults to `src/jreleaser/distributions/${distribution.name}/snap`.
If specified, path must exist.
icon:dot-circle[]
-->
@@ -687,8 +687,8 @@ jreleaser {
// icon:dot-circle[]
active = 'ALWAYS'
// Directory with file templates used to prepare the Snap distribution
// Defaults to `src/distribution/${distribution.name}/snap`.
// Directory with file templates used to prepare the Snap distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/snap`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/snap/templates'

View File

@@ -92,6 +92,12 @@ project:
# Defaults to `false`.
# icon:dot-circle[]
multiProject: false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties:
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
foo: bar
----
TOML::
+
@@ -174,7 +180,12 @@ TOML::
# Identifies the project as being member of a multi-project build.
# Defaults to `false`.
# icon:dot-circle[]
java.multiProject: false
java.multiProject = false
# Additional properties used when evaluating templates.
# icon:dot-circle[]
java.extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
----
JSON::
+
@@ -263,7 +274,14 @@ JSON::
// Identifies the project as being member of a multi-project build.
// Defaults to `false`.
// icon:dot-circle[]
"multiProject": false
"multiProject": false,
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
"foo": "bar"
}
}
}
}
@@ -407,6 +425,17 @@ Maven::
icon:dot-circle[]
-->
<multiProject>false</multiProject>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
-->
<foo>bar</foo>
</extraProperties>
</java>
</project>
</jreleaser>
@@ -498,6 +527,11 @@ jreleaser {
// If undefined, will be determine based on the Gradle setup.
// icon:dot-circle[]
multiProject = false
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
}
}
}

View File

@@ -1,3 +1,4 @@
.Examples
* xref:simple-release.adoc[]
* xref:auto-config-release.adoc[]
* xref:cross-platform-jlink.adoc[]

View File

@@ -5,7 +5,7 @@ pass:[https://github.com/duke/app.git]
[source,sh]
----
$ git remote -vvs
$ git remote -vv
origin https://github.com/duke/app.git (fetch)
origin https://github.com/duke/app.git (push)
----

View File

@@ -0,0 +1,412 @@
= Cross Platform Jlink
The following configuration defines a distribution named `app` that's configured to generate 2 jlink Java runtimes,
one for OSX, the other for Linux. The project source is kept at pass:[https://github.com/duke/app]. The zip files of
both distributions will be uploaded to the GitHub release, and a Docker image will be generated for the Linux zip.
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
project:
name: app
version: 1.0.0
description: Awesome App
longDescription: Awesome App
website: pass:[https://acme.com/app]
authors:
- Duke
license: Apache-2.0
java:
mainClass: com.acme.Main
groupId: com.acme
artifactId: app
version: 16
release:
github:
overwrite: true
assemble:
jlinks:
app:
active: always
mainJar:
path: 'target/{{distributionName}}-{{projectVersion}}.jar'
jdk:
path: /home/jdks/16.0.0-zulu-osx
platform: osx
targetJdks:
- path: /home/jdks/16.0.0-zulu-osx
platform: osx
- path: /home/jdks/16.0.0-zulu-linux_x64
platform: linux
packagers:
docker:
active: always
baseImage: ubuntu:latest
preCommands:
- 'RUN apt-get update -y'
- 'RUN apt-get install unzip'
registries:
- serverName: DEFAULT
----
TOML::
+
[source,toml]
[subs="+macros"]
----
[project]
name = "app"
version = "1.0.0"
description = "Awesome App"
longDescription = "Awesome App"
website = "pass:[https://acme.com/app]"
authors = ["Duke"]
license = "Apache-2.0"
java.mainClass = "com.acme.Main"
java.groupId = "com.acme"
java.artifactId = "app"
java.version = "16"
[release.github]
overwrite = true
[assemble.jlinks.app]
active = "ALWAYS"
mainJar = { path = "target/{{distributionName}}-{{projectVersion}}.jar" }
jdk = { path = "/home/jdks/16.0.0-zulu-osx", platform = "osx" }
pass:[[[assemble.jlinks.app.targetJdks]]]
path = "/home/jdks/16.0.0-zulu-osx"
platform = "osx"
pass:[[[assemble.jlinks.app.targetJdks]]]
path = "/home/jdks/16.0.0-zulu-linux_x64"
platform = "linux"
[packagers.docker]
active = "ALWAYS"
baseImage = "ubuntu:latest"
preCommands = [
"RUN apt-get update -y",
"RUN apt-get install unzip"]
pass:[[[packagers.docker.registries]]]
serverName = "DEFAULT"
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
"project": {
"name": "app",
"description": "Awesome App",
"longDescription": "Awesome App",
"website": "pass:[https://acme.com/app]",
"authors": ["Duke"],
"license": "Apache-2.0",
"java": {
"mainClass": "com.acme.Main",
"groupId": "com.acme",
"artifactId": "app",
"version": "16"
}
},
"release": {
"github": {
"overwrite": true
}
},
"assemble": {
"jlinks": {
"app": {
"active": "ALWAYS",
"mainJar": {
"path": "target/{{distributionName}}-{{projectVersion}}.jar"
},
"jdk": {
"path": "/home/jdks/16.0.0-zulu-osx",
"platform": "osx"
},
"targetJdks": [
{
"path": "/home/jdks/16.0.0-zulu-osx",
"platform": "osx"
},
{
"path": "/home/jdks/16.0.0-zulu-linux",
"platform": "linux"
}
]
}
}
},
"packagers": {
"docker": {
"active": "ALWAYS",
"baseImage": "ubuntu:latest",
"preCommands": [
"RUN apt-get update -y",
"RUN apt-get install unzip"],
"registries": {
"DEFAULT": { }
}
}
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim,attributes"]
----
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.acme</groupId>
<artifactId>app</artifactId>
<version>1.0.0</version>
<name>app</name>
<description>Sample app</description>
<url>https://acme.com/app</url>
<inceptionYear>2020</inceptionYear>
<properties>
<maven.compiler.release>16</maven.compiler.release>
</properties>
<licenses>
<license>
<name>Apache-2.0</name>
<url>https://spdx.org/licenses/Apache-2.0.html</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>duke</id>
<name>Duke</name>
<roles>
<role>author</role>
</roles>
</developer>
</developers>
<build>
<plugins>
<plugin>
<groupId>org.jreleaser</groupId>
<artifactId>jreleaser-maven-plugin</artifactId>
<version>{jreleaser-version}</version>
<configuration>
<jreleaser>
<project>
<java>
<mainClass>com.acme.Main</mainClass>
</java>
</project>
<release>
<github>
<overwrite>true</overwrite>
</github>
</release>
<assemble>
<jlinks>
<jlink>
<name>app</name>
<active>ALWAYS</active>
<mainJar>
<path>target/{{distributionName}}-{{projectVersion}}.jar</path>
</mainJar>
<jdk>
<path>/home/jdks/16.0.0-zulu-osx</path>
<platform>osx</platform>
</jdk>
<targetJdks>
<targetJdk>
<path>/home/jdks/16.0.0-zulu-osx</path>
<platform>osx</platform>
</targetJdk>
<targetJdk> {
<path>/home/jdks/16.0.0-zulu-linux</path>
<platform>linux</platform>
</targetJdk>
</targetJdks>
</jlink>
</jlinks>
</assemble>
<packagers>
<docker>
<active>ALWAYS</active>
<baseImage>ubuntu:latest</baseImage>
<preCommands>
<preCommand>RUN apt-get update -y</preCommand>
<preCommand>RUN apt-get install unzip</preCommand>
</preCommands>
<registries>
<registry>
<serverName>DEFAULT</serverName>
</registry>
</registries>
</docker>
</packagers>
</jreleaser>
</configuration>
</plugin>
</plugins>
</build>
</project>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
plugins {
id 'org.jreleaser'
}
group = 'com.acme'
version = '1.0.0'
jreleaser {
project {
name = 'app'
description = 'Awesome App'
longDescription = 'Awesome App'
website = 'pass:[https://acme.com/app]'
authors = ['Duke']
license = 'Apache-2.0'
java {
mainClass = 'com.acme.Main'
artifactId = 'app'
version = '16'
}
}
release {
github {
overwrite = true
}
}
assemble {
jlinks {
app {
active = 'ALWAYS'
mainJar {
path = 'target/{{distributionName}}-{{projectVersion}}.jar'
}
jdk {
path = '/home/jdks/16.0.0-zulu-osx'
platform = 'osx'
}
targetJdk {
path = '/home/jdks/16.0.0-zulu-osx'
platform = 'osx'
}
targetJdk {
path = '/home/jdks/16.0.0-zulu-linux'
platform = 'linux'
}
}
}
}
packagers {
docker {
active = 'ALWAYS'
baseImage = 'ubuntu:latest'
preCommands = [
'RUN apt-get update -y',
'RUN apt-get install unzip']
registries {
DEFAULT { }
}
}
}
}
----
====
Assembling the jlink Java Runtimes.
[source,sh]
[subs="attributes"]
----
$ jreleaser assemble
[INFO] JReleaser {jreleaser-version}
[INFO] Configuring with jreleaser.yml
[INFO] - basedir set to /Users/duke/tmp/app
[INFO] Reading configuration
[INFO] Loading properties from /Users/duke/.jreleaser/config.properties
[INFO] Validating configuration
[INFO] Project version set to 1.0.0
[INFO] Release is not snapshot
[INFO] Timestamp is 2021-04-16T23:41:20.220912+02:00
[INFO] HEAD is at 0357971
[INFO] dryrun set to false
[INFO] Assembling all distributions
[INFO] [jlink] assembling app distribution
[INFO] [jlink] - com.acme.app-1.0.0-osx
[INFO] [jlink] - com.acme.app-1.0.0-linux
[INFO] JReleaser succeeded after 8.900s
[INFO] Writing output properties to out/jreleaser/output.properties
----
Releasing all distributions.
[source,sh]
[subs="attributes"]
----
$ jreleaser full-release
[INFO] JReleaser {jreleaser-version}
[INFO] Configuring with jreleaser.yml
[INFO] - basedir set to /Users/duke/tmp/app
[INFO] Reading configuration
[INFO] Loading properties from /Users/duke/.jreleaser/config.properties
[INFO] Validating configuration
[INFO] Project version set to 1.0.0
[INFO] Release is not snapshot
[INFO] Timestamp is 2021-04-16T23:41:39.744177+02:00
[INFO] HEAD is at 0357971
[INFO] dryrun set to false
[INFO] Generating changelog: out/jreleaser/release/CHANGELOG.md
[INFO] Calculating checksums
[INFO] [checksum] out/jreleaser/app/assemble/jlink/com.acme.app-1.0.0-osx.zip
[INFO] [checksum] out/jreleaser/app/assemble/jlink/com.acme.app-1.0.0-linux.zip
[INFO] Signing files
[INFO] Signing is not enabled. Skipping
[INFO] Releasing to https://github.com/duke/app
[INFO] - uploading com.acme.app-1.0.0-osx.zip
[INFO] - uploading com.acme.app-1.0.0-linux.zip
[INFO] - uploading checksums.txt
[INFO] Preparing distributions
[INFO] - Preparing app distribution
[INFO] [docker] preparing app distribution
[INFO] Packaging distributions
[INFO] - Packaging app distribution
[INFO] [docker] packaging app distribution
[INFO] [docker] - duke/app:v1.0.0
[INFO] [docker] sha256:a8eb8c32b795b320a3b52e9c6e62e5c6845def2fee83fd30b2a82b20b7c542a9
[INFO] Uploading distributions
[INFO] - Uploading app distribution
[INFO] [docker] uploading app distribution
[INFO] [docker] - duke/app:v1.0.0
[INFO] [docker] Removing login credentials for https://index.docker.io/v1/
[INFO] Announcing release
[INFO] Announcing is not enabled. Skipping.
[INFO] JReleaser succeeded after 5.527s
[INFO] Writing output properties to out/jreleaser/output.properties
----

View File

@@ -78,7 +78,7 @@ Maven::
<developers>
<developer>
<id>duke</id>
<name>dule</name>
<name>Duke</name>
<roles>
<role>author</role>
</roles>

View File

@@ -38,6 +38,25 @@ Description:: The config file.
---
*full*
[horizontal]
Type:: boolean
Default value:: false
Property:: jreleaser.full
Required:: false
Description:: Display full configuration.
---
*assembly*
[horizontal]
Type:: boolean
Default value:: false
Property:: jreleaser.assembly
Required:: false
Description:: Display only assembly configuration.
---
*skip*
[horizontal]
Type:: boolean
@@ -108,6 +127,48 @@ Property:: jreleaser.skip
Required:: false
Description:: Skips execution of this task.
== jreleaser-assemble
Upload all distributions.
*configFile*
[horizontal]
Type:: File
Default value:: <none>
Property:: jreleaser.config.file
Required:: true
Description:: The config file.
---
*distributionName*
[horizontal]
Type:: String
Default value:: <none>
Property:: jreleaser.distribution.name
Required:: false
Description:: The name of the distribution to be assembled.
---
*assemblerName*
[horizontal]
Type:: String
Default value:: <none>
Property:: jreleaser.assembler.name
Required:: false
Description:: The name of the assembler to run.
---
*skip*
[horizontal]
Type:: boolean
Default value:: false
Property:: jreleaser.skip
Required:: false
Description:: Skips execution of this task.
== jreleaser-changelog
Calculate the changelog.

View File

@@ -13,6 +13,7 @@ Commands:
init Create a jreleaser config file.
config Display current configuration.
template Generate a tool template.
assemble Assemble distributions.
changelog Calculate the changelog.
checksum Calculate checksums.
sign Sign release artifacts.
@@ -53,8 +54,9 @@ The file will be generated at `<basedir>` if specified, otherwise at the current
[source,bash]
----
$ jreleaser config -h
Usage: jreleaser config [-dfhiqVw] [-b=<basedir>] [-c=<configFile>]
Usage: jreleaser config [-adfhiqVw] [-b=<basedir>] [-c=<configFile>]
Display current configuration.
-a, --assembly Display assembly configuration.
-b, --basedir=<basedir> Base directory.
-c, --config-file=<configFile>
The config file
@@ -107,6 +109,41 @@ xref:ROOT:distributions/index.adoc[distribution types].
The value of `--tool-name` must match any of the available xref:configuration:packagers/index.adoc[].
== assemble
[source,bash]
----
$ jreleaser assemble -h
Usage: jreleaser assemble [-dhiqVw] [-an=<assemblerName>] [-b=<basedir>]
[-c=<configFile>] [-dn=<distributionName>]
Assemble distributions.
-an, --assembler-name=<assemblerName>
The name of the assembler.
-b, --basedir=<basedir> Base directory.
-c, --config-file=<configFile>
The config file
-d, --debug Set log level to debug.
-dn, --distribution-name=<distributionName>
The name of the distribution.
-h, --help Show this help message and exit.
-i, --info Set log level to info.
-q, --quiet Log errors only.
-V, --version Print version information and exit.
-w, --warn Set log level to warn.
----
If `--config-file` is undefined then the command assumes the file is named `jreleaser.[yml|toml|json]` and it's
found at the current directory.
If `--basedir` is undefined then the command assumes it's the same directory that contains the resolved config file.
The value of `--assembler-name` must match any of the available xref:configuration:assemble/index.adoc[assemblers].
The value of `--distribution-name` must match the name of a configured found in the
xref:configuration:assemble/index.adoc[assemblers] section.
This command must be invoked separatedly from the others as some of the assmeblers are platform specific.
== changelog
[source,bash]

View File

@@ -10,6 +10,22 @@ The following tasks are provided:
Display current configuration.
*full*
[horizontal]
Type:: Boolean
Default value:: false
Option:: full
Required:: false
Description:: Displays full configuration.
*assembly*
[horizontal]
Type:: Boolean
Default value:: false
Option:: assembly
Required:: false
Description:: Displays assembly configuration.
== jreleaserTemplate
Generate a tool template.
@@ -62,6 +78,26 @@ Option:: snapshot
Required:: false
Description:: Lookup snapshot specific template files.
== jreleaserAssemble
Assembles distributions
*distributionName*
[horizontal]
Type:: String
Default value:: <none>
Option:: distribution-name
Required:: true
Description:: The name of the distribution.
*assemblerName*
[horizontal]
Type:: String
Default value:: <none>
Option:: assembler-name
Required:: true
Description:: The name of the assembler.
== jreleaserChangelog
Calculate the changelog.

View File

@@ -13,6 +13,22 @@ The following MOJOs are provided:
Display current configuration.
*full*
[horizontal]
Type:: boolean
Default value:: false
Property:: jreleaser.config.full
Required:: false
Description:: Displays full configuration.
*assembly*
[horizontal]
Type:: boolean
Default value:: false
Property:: jreleaser.config.assembly
Required:: false
Description:: Displays assembly configuration.
*skip*
[horizontal]
Type:: boolean
@@ -83,6 +99,38 @@ Property:: jreleaser.template.skip
Required:: false
Description:: Skips execution of this MOJO.
== jreleaser:assemble
Assemble distributions.
*distributionName*
[horizontal]
Type:: String
Default value:: <none>
Property:: jreleaser.distribution.name
Required:: true
Description:: The name of the distribution.
---
*assemblerName*
[horizontal]
Type:: String
Default value:: <none>
Property:: jreleaser.assembler.name
Required:: true
Description:: The name of the assembler.
---
*skip*
[horizontal]
Type:: boolean
Default value:: false
Property:: jreleaser.assemble.skip
Required:: false
Description:: Skips execution of this MOJO.
== jreleaser:changelog
Calculate the changelog.