Jlink

Creates a Java Runtime image using jlink.

Cross platform Java runtime images may be created however you must ensure that all configured JDKs have the same matching major version.
You have to install additional JDKs to enable cross-platform images. JReleaser will not install these JDKS for you. You may configure the JDKs Maven Plugin or the JDKs Gradle Plugin to downloads JDKS.

Legend:

  • required

  • optional

  • may use environment variable

  • accepts Name Templates

  • YAML

  • TOML

  • JSON

  • Maven

  • Gradle

# 
assemble:
  # 
  jlink:
    # Assemblers require a name.
    # 
    app:

      # Enables or disables the assembler.
      # Valid 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

      # Additional properties used when evaluating templates.
      #  
      extraProperties:
        # Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
        foo: bar

      # Name of the executable launcher.
      # If left undefined, will use ${assembler.name}.
      # 
      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.
      # 
      templateDirectory: path/to/jlink/templates

      # Name of the generated image.
      # If left undefined, will use
      # ${project.java.groupId}.${project.java.artifactId}.${project.version}.
      # Generated artifacts always have the platform as suffix.
      #  
      imageName: 'app-{{projectVersion}}'

      # Name transformation of the generated image.
      # Transformed artifacts always have the platform as suffix.
      #  
      imageNameTransform: 'app-{{projectEffectiveVersion}}'

      # Name of main module (if any).
      # Define only if the application is modular.
      # 
      moduleName: com.acme.demo

      # List of module names.
      # Overrides modules found by jdeps.
      # 
      moduleNames:
        - java.base
        - com.acme.demo

      # List of additional module names.
      # Additional required modules but not detected by jdeps.
      # 
      additionalModuleNames:
        - jdk.crypto.ec
        - jdk.localedata

      # List of JDKs for generating cross-platform images.
      #  
      targetJdks:
        - path: path/to/jdk
          platform: osx
        - path: path/to/jdk
          platform: linux

      # The JDK to use.
      # If undefined, will find a matching JDK.
      #  
      jdk:
        path: path/to/jdk
        platform: linux

      # Configuration flags for Jdeps
      # 
      jdeps:
        # Specifies the version when processing multi-release jar files.
        # Value should be integer >= 9 or `base`.
        # Defaults to empty
        # 
        multiRelease: base

        # Ignore missing dependences.
        # Defaults to `false`
        # 
        ignoreMissingDeps: true

      # A list of build arguments.
      # Defaults are shown.
      # 
      args:
        - "--no-header-files"
        - "--no-man-pages"
        - "--compress=2"
        - "--strip-debug"

      # 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

      # Copy main and input JARs into archive.
      # Defaults to `true`.
      # 
      copyJars: true

      # 
      java:
        # Maven coordinates: groupId.
        # If left undefined, will use ${project.java.groupId}.
        # 
        groupId: com.acme

        # Maven coordinates: artifactId.
        # If left undefined, will use ${project.java.artifactId}.
        # 
        artifactId: app

        # The minimum Java version required by consumers to run the application.
        # If left undefined, will use ${project.java.version}.
        # 
        version: 8

        # The application's entry point.
        # If left undefined, will use ${project.java.mainClass}.
        # 
        mainClass: com.acme.Main

        # Identifies the project as being member of a multi-project build.
        # If left undefined, will use ${project.java.multiProject}.
        # 
        multiProject: false

        # Additional properties used when evaluating templates.
        # 
        extraProperties:
          # Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
          foo: bar

      # Defines a list of additional files as globs.
      # These files will be added to the assembled Zip file.
      # 
      files:
          # The pattern to use.
          # May use glob or regex pattern syntax.
          #  
        - pattern: path/to/**/*.txt

      # Defines a list of additional files as filesets.
      # These files will be added to the assembled Zip file.
      # 
      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

          # 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
# Assemblers require a name.
# 
[assemble.jlink.app]

  # Enables or disables the assembler.
  # Valid 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

  # Additional properties used when evaluating templates.
  #  
  extraProperties.foo = "bar"
  # Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.

  # Name of the executable launcher.
  # If left undefined, will use ${assembler.name}.
  # 
  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.
  # 
  templateDirectory = "path/to/jlink/templates"

  # Name of the generated image.
  # If left undefined, will use
  # ${project.java.groupId}.${project.java.artifactId}.${project.version}.
  # Generated artifacts always have the platform as suffix.
  #  
  imageName = "app-{{projectVersion}}"

  # Name transformation of the generated image.
  # Transformed artifacts always have the platform as suffix.
  #  
  imageNameTransform = "app-{{projectEffectiveVersion}}"

  # Name of main module (if any).
  # Define only if the application is modular.
  # 
  moduleName = "com.acme.demo"

  # List of module names.
  # Overrides modules found by jdeps.
  # 
  moduleNames = [
    "java.base",
    "com.acme.demo"]

  # List of additional module names.
  # Additional required modules but not detected by jdeps.
  # 
  additionalModuleNames = [
    "jdk.crypto.ec",
    "jdk.localedata"]

  # List of JDKs for generating cross-platform images.
  #  
  targetJdks = [
    { path = "path/to/jdk", platform = "osx" },
    { path = "path/to/jdk", platform = "linux" }]

  # The JDK to use.
  # If undefined, will find a matching JDK.
  #  
  jdk = { path = "path/to/jdk", platform = "linux" }

  # Configuration flags for Jdeps
  # 

  # Specifies the version when processing multi-release jar files.
  # Value should be integer >= 9 or `base`.
  # Defaults to empty
  # 
  jdeps.multiRelease = 'base'

  # Ignore missing dependences.
  # Defaults to `false`
  # 
  jdeps.ignoreMissingDeps = true

  # A list of build arguments.
  # Defaults are shown
  # 
  args = ["--no-header-files",
    "--no-man-pages",
    "--compress=2",
    "--strip-debug"]

  # 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"

  # Copy main and input JARs into archive.
  # Defaults to `true`.
  # 
  copyJars = true

  # Maven coordinates: groupId.
  # If left undefined, will use ${project.java.groupId}.
  # 
  java.groupId = "com.acme"

  # Maven coordinates: artifactId.
  # If left undefined, will use ${project.java.artifactId}.
  # 
  java.artifactId = "app"

  # The minimum Java version required by consumers to run the application.
  # If left undefined, will use ${project.java.version}.
  # 
  java.version = "8"

  # The application's entry point.
  # If left undefined, will use ${project.java.mainClass}.
  # 
  java.mainClass = "com.acme.Main"

  # Identifies the project as being member of a multi-project build.
  # If left undefined, will use ${project.java.multiProject}.
  # 
  java.multiProject = false

  # Additional properties used when evaluating templates.
  # 
  java.extraProperties.foo = "bar"
  # Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.

  # Defines a list of additional files as globs.
  # These files will be added to the assembled Zip file.
  # 
  [[assemble.jlink.app.files]]
    # The pattern to use.
    # May use glob or regex pattern syntax.
    #  
    pattern = "path/to/**/*.txt"

  # Defines a list of additional files as filesets.
  # These files will be added to the assembled Zip file.
  # 
  [[assemble.jlink.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"

    # 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.jlink.app.fileSets.extraProperties]]
      # Key will be capitalized and prefixed with `artifact`, i.e, `artifactFoo`.
      foo: bar
{
  // 
  "assemble": {
    // 
    "jlink": {
      // Assemblers require a name.
      // 
      "app": {

        // Enables or disables the assembler.
        // Valid 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,

        // Additional properties used when evaluating templates.
        //  
        "extraProperties": {
          // Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
          "foo": "bar"
        },

        // Name of the executable launcher.
        // If left undefined, will use ${assembler.name}.
        // 
        "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.
        // 
        "templateDirectory": "path/to/jlink/templates",

        // Name of the generated image.
        // If left undefined, will use
        // ${project.java.groupId}.${project.java.artifactId}.${project.version}.
        // Generated artifacts always have the platform as suffix.
        //  
        "imageName": "app-{{projectVersion}}",

        // Name transformation of the generated image.
        // Transformed artifacts always have the platform as suffix.
        //  
        "imageNameTransform": "app-{{projectEffectiveVersion}}",

        // Name of main module (if any).
        // Define only if the application is modular.
        // 
        "moduleName": "com.acme.demo",

        // List of module names.
        // Overrides modules found by jdeps.
        // 
        "moduleNames": [
           "java.base",
           "com.acme.demo"
        ],

        // List of additional module names.
        // Additional required modules but not detected by jdeps.
        // 
        "additionalModuleNames": [
          "jdk.crypto.ec",
          "jdk.localedata"
        ],

        // List of JDKs for generating cross-platform images.
        //  
        "targetJdks": [
          {
            "path": "path/to/jdk",
            "platform": "osx"
          },
          {
            "path": "path/to/jdk",
            "platform": "linux"
          }
        ],

        // The JDK to use.
        // If undefined, will find a matching JDK.
        //  
        "jdk": {
          "path": "path/to/jdk",
          "platform": "linux"
        },

        // Configuration flags for Jdeps
        // 
        "jdeps": {
          // Specifies the version when processing multi-release jar files.
          // Value should be integer >= 9 or `base`.
          // Defaults to empty
          // 
          "multiRelease": "base",

          // Ignore missing dependences.
          // Defaults to `false`
          // 
          "ignoreMissingDeps": true
        },

        // A list of build arguments.
        // Defualts are shown.
        // 
        "args": [
          "--no-header-files",
          "--no-man-pages",
          "--compress=2",
          "--strip-debug"
        ],

        // 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"
          }
        ],

        // Copy main and input JARs into archive.
        // Defaults to `true`.
        // 
        "copyJars": true,

        // 
        "java": {
          // Maven coordinates: groupId.
          // If left undefined, will use ${project.java.groupId}.
          // 
          "groupId": "com.acme",

          // Maven coordinates: artifactId.
          // If left undefined, will use ${project.java.artifactId}.
          // 
          "artifactId": "app",

          // The minimum Java version required by consumers to run the application.
          // If left undefined, will use ${project.java.version}.
          // 
          "version": "8",

          // The application's entry point.
          // If left undefined, will use ${project.java.mainClass}.
          // 
          "mainClass": "com.acme.Main",

          // Identifies the project as being member of a multi-project build.
          // If left undefined, will use ${project.java.multiProject}.
          // 
          "multiProject": false,

          // Additional properties used when evaluating templates.
          // 
          "extraProperties": {
            // Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
            "foo": "bar"
          }
        },

        // Defines a list of additional files as globs.
        // These files will be added to the assembled Zip file.
        // 
        "files": [
          {
            // The pattern to use.
            // May use glob or regex pattern syntax.
            //  
            "pattern": "path/to/**/*.txt"
          }
        ],

        // Defines a list of additional files as filesets.
        // These files will be added to the assembled Zip file.
        // 
        "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",

            // 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"
            }
          }
        ]
      }
    }
  }
}
<jreleaser>
  <!--
    
  -->
  <assemble>
    <!--
      
    -->
    <jlink>
      <!--
        Assemblers require a name.
        
      -->
      <app>
        <!--
          Enables or disables the distribution.
          Valid 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>

        <!--
          Additional properties used when evaluating templates.
           
        -->
        <extraProperties>
          <!--
            Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
          -->
          <foo>bar</foo>
        </extraProperties>

        <!--
          Name of the executable launcher.
          If left undefined, will use ${distribution.name}.
          
        -->
        <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.
          
        -->
        <templateDirectory>path/to/brew/templates</templateDirectory>

        <!--
          Name of the generated image.
          If left undefined, will use
          ${project.java.groupId}.${project.java.artifactId}.${project.version}.
          Generated artifacts always have the platform as suffix.
           
        -->
        <imageName>app-{{projectVersion}}</imageName>

        <!--
          Name transformation of the generated image.
          Transformed artifacts always have the platform as suffix.
           
        -->
        <imageNameTransform>app</imageNameTransform>

        <!--
          Name of main module (if any).
          Define only if the application is modular.
          
        -->
        <moduleName>com.acme.demo</moduleName>

        <!--
          List of module names.
          Overrides modules found by jdeps.
          
        -->
        <moduleNames>
          <moduleName>java.base</moduleName>
          <moduleName>com.acme.demo</moduleName>
        </moduleNames>

        <!--
          List of additional module names.
          Additional required modules but not detected by jdeps.
          
        -->
        <additionalModuleNames>
          <additionalModuleName>jdk.crypto.ec</additionalModuleName>
          <additionalModuleName>jdk.localedata</additionalModuleName>
        <additionalModuleNames>

        <!--
          List of JDKs for generating cross-platform images.
           
        -->
        <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 find a matching JDK.
           
        -->
        <jdk>
          <path>path/to/jdk</path>
          <platform>linux</platform>
        </jdk>

        <!--
          Configuration flags for Jdeps
          
        -->
        <jdeps>
          <!--
            Specifies the version when processing multi-release jar files.
            Value should be integer >= 9 or `base`.
            Defaults to empty
            
          -->
          <multiRelease>base</multiRelease>

          <!--
            Ignore missing dependences.
            Defaults to `false`
            
          -->
          <ignoreMissingDeps>true</ignoreMissingDeps>
        </jdeps>

        <!--
          The executable JAR that contains the application.
           
        -->
        <mainJar>
          <path>path/to/app.jar</path>
        </mainJar>

        <!--
          A list of build arguments.
          Defaults are shown.
          
        -->
        <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.
          
        -->
        <jars>
          <jar>
            <!--
              The pattern to use.
              May use glob or regex pattern syntax.
               
            -->
            <pattern>path/to/**/*.jar</pattern>
          </jar>
        </jars>

        <!--
          Copy main and input JARs into archive.
          Defaults to `true`.
          
        -->
        <copyJars>true</copyJars>

        <!--
          
        -->
        <java>
          <!--
            Maven coordinates>groupId.
            If left undefined, will use ${project.java.groupId}.
            
          -->
          <groupId>com.acme</groupId>

          <!--
            Maven coordinates>artifactId.
            If left undefined, will use ${project.java.artifactId}.
            
          -->
          <artifactId>app</artifactId>

          <!--
            The minimum Java version required by consumers to run the application.
            If left undefined, will use ${project.java.version}.
            
          -->
          <version>8</version>

          <!--
            The application's entry point.
            If left undefined, will use ${project.java.mainClass}.
            
          -->
          <mainClass>com.acme.Main</mainClass>

          <!--
            Identifies the project as being member of a multi-project build.
            If left undefined, will use ${project.java.multiProject}.
            
          -->
          <multiProject>false</multiProject>

          <!--
            Additional properties used when evaluating templates.
            
          -->
          <extraProperties>
            <!--
              Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
            -->
            <foo>bar</foo>
          </extraProperties>
        </java>

        <!--
          Defines a list of additional files as globs.
          These files will be added to the assembled Zip file.
          
        -->
        <files>
          <file>
            <!--
              The pattern to use.
              May use glob or regex pattern syntax.
               
            -->
            <pattern>path/to/**/*.txt</pattern>
          </file>
        </files>

        <!--
          Defines a list of additional files as filesets.
          These files will be added to the assembled Zip file.
          
        -->
        <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>

            <!--
              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>
      </app>
    </jlink>
  </assemble>
</jreleaser>
jreleaser {
  // 
  assemble {
    // 
    jlink {
      // Assemblers require a name.
      // 
      app {

        // Enables or disables the assembler.
        // Valid 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

        // Additional properties used when evaluating templates.
        // Key will be capitalized and prefixed with `jlink`, i.e, `jlinkFoo`.
        //  
        extraProperties.put('foo', 'bar')

        // Name of the executable launcher.
        // If left undefined, will use ${assembler.name}.
        // 
        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.
        // 
        templateDirectory = 'path/to/jlink/templates'

        // Name of the generated image.
        // If left undefined, will use
        // ${project.java.groupId}.${project.java.artifactId}.${project.version}.
        // Generated artifacts always have the platform as suffix.
        //  
        imageName = 'app-{{projectVersion}}'

        // Name transformation of the generated image.
        // Transformed artifacts always have the platform as suffix.
        //  
        imageNameTransform = 'app-{{projectEffectiveVersion}}'

        // Name of main module (if any).
        // Define only if the application is modular.
        // 
        moduleName = 'com.acme.demo'

        // List of module names.
        // Overrides modules found by jdeps.
        // 
        moduleNames = [
            'java.base',
            'com.acme.demo'
        ]

        // List of additional module names.
        // Additional required modules but not detected by jdeps.
        // 
        additionalModuleNames = [
          'jdk.crypto.ec',
          'jdk.localedata'
        ]

        // List of JDKs for generating cross-platform images.
        //  
        targetJdk {
          pat = 'path/to/jdk'
          platform = 'osx'
        }
        targetJdk {
          pat = 'path/to/jdk'
          platform = 'linux'
        }

        // The JDK to use.
        // If undefined, will find a matching JDK.
        //  
        jdk {
          path = 'path/to/jdk'
          platform = 'linux'
        }

        // Configuration flags for Jdeps
        // 
        jdeps {
          // Specifies the version when processing multi-release jar files.
          // Value should be integer >= 9 or `base`.
          // Defaults to empty
          // 
          multiRelease = 'base'

          // Ignore missing dependences.
          // Defaults to `false`
          // 
          ignoreMissingDeps = true
        }

        // A list of build arguments.
        // Defaults are shown.
        // 
        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.
        //  
        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'
        }

        // Copy main and input JARs into archive.
        // Defaults to `true`.
        // 
        copyJars = true

        // 
        java {
          // Maven coordinates = groupId.
          // If left undefined, will use ${project.java.groupId}.
          // 
          groupI = 'com.acme'

          // Maven coordinates = artifactId.
          // If left undefined, will use ${project.java.artifactId}.
          // 
          artifactId = 'app'

          // The minimum Java version required by consumers to run the application.
          // If left undefined, will use ${project.java.version}.
          // 
          version = '8'

          // The application's entry point.
          // If left undefined, will use ${project.java.mainClass}.
          // 
          mainClass = 'com.acme.Main'

          // Identifies the project as being member of a multi-project build.
          // If left undefined, will use ${project.java.multiProject}.
          // 
          multiProject = false

          // Additional properties used when evaluating templates.
          // Key will be capitalized and prefixed with `java`, i.e, `javaFoo`.
          // 
          extraProperties.put('foo', 'bar')
        }

        // Defines a list of additional files as globs.
        // These files will be added to the assembled Zip file.
        // 
        files {
          // The pattern to use.
          // May use glob or regex pattern syntax.
          //  
          pattern = 'path/to/**/*.txt'
        }

        // Defines a list of additional files as filesets.
        // These files will be added to the assembled Zip file.
        // 
        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'

          // 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')
        }
      }
    }
  }
}

JDKs

You may specify a value for both jdk and targetJdks, either, or none. The following rules apply to resolve which JDKs will be used to generate custom Java runtimes:

  1. If both jdk and targetJdks are specified then they must match the same major version.

  2. If only jdk is specified then the targetJdks will contain a single entry matching the given jdk.

  3. If no jdk is specified then a matching JDK will be searched in targetJDKs.

  4. If no match is found in rule #3 then the currently executing JDK will be used leading to the same result as rule #2.

Paths for jdk and targetJdks must exist in the file system. You may use the maven jdks-maven-plugin or gradle jdks-gradle-plugin to download required JDKs.

Templates

The default location for templates is:

src/jreleaser/assemblers/<distribution-name>/jlink

The following list shows the filenames that may be used to override default templates:

  • launcher.bat.tpl

  • launcher.tpl