镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

macOS zipball and tarball may not keep the bundled JRE executable #508

Open

Description

@fvarrui

Zipballs and tarballs of a macOS app may contain a bundled JRE whose executables aren't executable, when built off macOS (e.g. on Windows).

Where

The rules that set mode 755 on the JRE executables point to Contents/PlugIns/${jreDirectoryName}/Contents/Home/bin/*, but the JRE is in Contents/PlugIns/${jreDirectoryName}.jre/Contents/Home (MacPackager, line 95):

  • gradle/CreateTarball.java (lines 87 and 94) and gradle/CreateZipball.java (lines 83 and 89).
  • mac/assembly.xml.vtl (lines 16, 17, 31 and 32), used by Maven.

So the JRE's bin/* and lib/jspawnhelper keep whatever mode the copy preserved. On macOS and GNU/Linux the files are already executable, but built on Windows they may not be, and the app wouldn't start. Not tested yet.

Fix

Use ${jreDirectoryName}.jre in those paths. A customLauncher used with administratorRequired isn't in the 755 list either.

Activity

  1. fvarrui commented on Oct 11, 2026

    @fvarrui
    CollaboratorAuthor

    Fixed in devel (29e3392): the zipball and tarball permission rules point to the .jre bundle folder, and lib/jspawnhelper gets mode 755 with Gradle too. The macOS smoke tests check that bin/java and jspawnhelper are executable in the tarball.

    It will ship in 2.0.1, and I'll close this issue then.

    How to test 2.0.1-SNAPSHOT

    Important

    Since 2.0.0 the groupId, the Gradle plugin id and the Java packages are io.github.javapackager (see Upgrading to 2.0).

    Maven, add the snapshots repository and use the snapshot version:

    <pluginRepositories>
        <pluginRepository>
            <id>central-portal-snapshots</id>
            <url>https://central.sonatype.com/repository/maven-snapshots/</url>
            <releases><enabled>false</enabled></releases>
            <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
    </pluginRepositories>
    [...]
    <plugin>
        <groupId>io.github.javapackager</groupId>
        <artifactId>javapackager</artifactId>
        <version>2.0.1-SNAPSHOT</version>
        [...]
    </plugin>

    Gradle, add the snapshots repository in settings.gradle:

    pluginManagement {
        repositories {
            maven { url = 'https://central.sonatype.com/repository/maven-snapshots/' }
            gradlePluginPortal()
        }
    }

    and use the snapshot version in build.gradle:

    plugins {
        id 'io.github.javapackager' version '2.0.1-SNAPSHOT'
    }

    See Snapshot versions for more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingfixedIssue fixed and release pending

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions