:package: Gradle/Maven plugin to package Java applications as native Windows, Mac OS X, or GNU/Linux executables and create installers for them.

Overview

JavaPackager

Maven Central GPL-3.0

JavaPackager is a hybrid plugin for Maven and Gradle which provides an easy way to package Java applications in native Windows, Mac OS X or GNU/Linux executables, and generate installers for them.

SNAPSHOT version is not released to Maven Central, so you have to install it manually.

๐Ÿ‘€ See JavaPackager changes and fixes.

History

It was born while teaching to my students how to build and distribute their Java apps, and after seeing that a chain of several plugins was needed to achieve this task, I decided to develop a plugin ๐Ÿ’ to govern them all.

How to use this plugin

Package your app with Maven

Add the following plugin tag to your pom.xml:

<plugin>
	<groupId>io.github.fvarrui</groupId>
	<artifactId>javapackager</artifactId>
	<version>1.5.1</version>
	<executions>
		<execution>
			<phase>package</phase>
			<goals>
				<goal>package</goal>
			</goals>
			<configuration>
				<!-- mandatory -->
				<mainClass>path.to.your.mainClass</mainClass>
				<!-- optional -->
				<bundleJre>true|false</bundleJre>
				<generateInstaller>true|false</generateInstaller>
				<administratorRequired>true|false</administratorRequired>
				<platform>auto|linux|mac|windows</platform>
				<additionalResources>
					<additionalResource>file path</additionalResource>
					<additionalResource>folder path</additionalResource>
					<additionalResource>...</additionalResource>
				</additionalResources>
				<linuxConfig>...</linuxConfig>
				<macConfig>...</macConfig>
				<winConfig>...</winConfig>
				[...]
			</configuration>
		</execution>
	</executions>
</plugin>

See Maven plugin configuration samples to know more.

And execute the next command in project's root folder:

mvn package

Package your app with Gradle

Apply JavaPackager plugin in build.gradle using legacy mode (because at the moment it's only available in Maven Central repository):

buildscript {
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath 'io.github.fvarrui:javapackager:1.5.1'
	}
}

apply plugin: 'io.github.fvarrui.javapackager.plugin'

Create your packaging task:

task packageMyApp(type: io.github.fvarrui.javapackager.gradle.PackageTask, dependsOn: build) {
	// mandatory
	mainClass = 'path.to.your.mainClass'
	// optional
	bundleJre = true|false
	generateInstaller = true|false
	administratorRequired = true|false
	platform = auto|linux|mac|windows
	additionalResources = [ file('file path'), file('folder path'), ... ]
	linuxConfig {
		...
	}
	macConfig {
		...
	}
	winConfig {
		...
	}
	...
}

See Gradle plugin configuration samples to know more.

And execute the next command in project's root folder:

gradle packageMyApp

Generated artifacts

By default it will generate next artifacts in ${outputDirectory} folder:

Artifact Description
${name} Directory with the native application and other needed assets.
${name}-${version}-runnable.jar Runnable JAR file.
${name}_${version}.deb DEB package file if it's executed on GNU/Linux (requires dpkg-deb).
${name}_${version}.rpm RPM package file if it's executed on GNU/Linux (requires rpmbuild).
${name}_${version}.exe Setup file if it's executed on Windows (requires Inno Setup).
${name}_${version}.msi MSI installer file if it's executed on Windows (requires WiX Toolset).
${name}_${version}.msm MSI merge module file if it's executed on Windows (requires WiX Toolset).
${name}_${version}.dmg Disk image file if it's executed on Mac OS X (requires hdiutil).
${name}_${version}.pkg PKG installer file if it's executed on Mac OS X (requires pkgbuild)
${name}-${version}-${platform}.zip Zipball containing generated directory ${name}.
${name}-${version}-${platform}.tar.gz Compressed tarball containing generated directory ${name}.

โš ๏ธ Installers generation will be ommited if target platform is different from current platform (see platform property).

โš ๏ธ DEB and RPM package generation in Gradle is not yet available. Coming soon!

Plugin configuration properties

Property Mandatory Default value Description
additionalModules โŒ [] Additional modules to the ones identified by jdeps or the specified with modules property.
additionalResources โŒ [] Additional files and folders to include in the bundled app.
administratorRequired โŒ false App will run as administrator (with elevated privileges).
assetsDir โŒ ${basedir}/assets or ${projectdir}/assets Assets location (icons and custom Velocity templates).
bundleJre โŒ false Embeds a customized JRE with the app.
classpath โŒ List of additional paths to JVM classpath, separated with ; (recommended) or :.
copyDependencies โŒ true Bundles all dependencies (JAR files) with the app.
createTarball โŒ false Bundles app folder in tarball.
createZipball โŒ false Bundles app folder in zipball.
customizedJre โŒ true Generates a customized JRE, including only identified or specified modules. Otherwise, all modules will be included.
description โŒ ${project.description} or ${displayName} Project description.
displayName โŒ ${project.name} or ${name} App name to show.
envPath โŒ Defines PATH environment variable in GNU/Linux and Mac OS X startup scripts.
extra โŒ Map with extra properties to be used in customized Velocity templates, accesible through $info.extra variable.
generateInstaller โŒ true Generates an installer for the app.
iconFile โŒ Path to the app icon file (PNG, XPM, ICO or ICNS). โš ๏ธ Deprecated (see platform specific properties).
jdkPath โŒ ${java.home} JDK used to generate a customized JRE. It allows to bundle customized JREs for different platforms.
jreDirectoryName โŒ "jre" Bundled JRE directory name.
jreMinVersion โŒ JRE minimum version. If an appropriate version cannot be found display error message. Disabled if a JRE is bundled.
jrePath โŒ "" Path to JRE folder. If specified, it will bundle this JRE with the app, and won't generate a customized JRE. For Java 8 version or least.
licenseFile โŒ ${project.licenses[0].url} or ${basedir}/LICENSE or ${projectdir}/LICENSE Path to project license file.
mainClass โœ”๏ธ ${exec.mainClass} Full path to your app main class.
manifest โŒ Allows adding additional entries to MANIFEST.MF file.
modules โŒ [] Defines modules to customize the bundled JRE. Don't use jdeps to get module dependencies.
name โŒ ${project.name} or ${project.artifactId} App name.
organizationName โŒ ${project.organization.name} or "ACME" Organization name.
organizationUrl โŒ ${project.organization.url} Organization website URL.
organizationEmail โŒ Organization email.
outputDirectory โŒ ${project.build.directory} or ${project.builddir} Output directory (where the artifacts will be generated).
platform โŒ auto Defines the target platform, which could be different to the execution platform. Possible values: auto, mac, linux, windows. Use auto for using execution platform as target.
runnableJar โŒ Defines your own JAR file to be bundled. If it's ommited, the plugin packages your code in a runnable JAR and bundle it with the app.
url โŒ App website URL.
useResourcesAsWorkingDir โŒ true Uses app resources folder as default working directory (always true on Mac OS).
version โŒ ${project.version} Project version.
vmArgs โŒ [] Adds VM arguments.

Some default values depends on the used building tool.

Platform specific properties

Property Mandatory Default Description
linuxConfig โŒ GNU/Linux specific properties.
macConfig โŒ Mac OS X specific properties.
winConfig โŒ Windows specific properties.

โš ๏ธ Be careful when using the platform property if your project uses platform dependent libraries, so the libraries of the current platform will be copied, not those required for the target platform. You can solve this problem using classifiers. Also, intallers generation will be ommited.

Plugin assets

Some assets, such as application icons and Velocity templates, could be placed in ${assetsDir} folder organized by platform.

${assetsDir}/
โ”œโ”€โ”€ linux/
โ”œโ”€โ”€ mac/
โ””โ”€โ”€ windows/

Icons

If icons are located in ${assetsDir} folders, it would not be necessary to specify the iconFile property:

${assetsDir}/
โ”œโ”€โ”€ linux/
โ”‚   โ”œโ”€โ”€ ${name}.png     # on GNU/Linux it has to be a PNG file for DEB package
โ”‚   โ””โ”€โ”€ ${name}.xpm     # and XPM file for RPM package
โ”œโ”€โ”€ mac/
โ”‚   โ””โ”€โ”€ ${name}.icns    # on Mac OS X it has to be a ICNS file
โ””โ”€โ”€ windows/
    โ””โ”€โ”€ ${name}.ico     # on Windows it has to be a ICO file

โš ๏ธ If iconFile plugin property is not specified and it can't find the correct icon in ${assetsDir} folder, it will use an icon by default for all platforms.

Velocity templates

Velocity templates (.vtl files) are used to generate some artifacts which have to be bundled with the app.

It is possible to use your own customized templates. You just have to put one of the following templates in the ${assetsDir} folder organized by platform, and the plugin will use these templates instead of default ones:

${assetsDir}/
โ”œโ”€โ”€ linux/
|   โ”œโ”€โ”€ assembly.xml.vtl               # maven-assembly-plugin template to generate ZIP/TGZ bundles for GNU/Linux
|   โ”œโ”€โ”€ control.vtl                    # DEB control template
|   โ”œโ”€โ”€ desktop.vtl                    # Desktop template
โ”‚   โ””โ”€โ”€ startup.sh.vtl                 # Startup script template
โ”œโ”€โ”€ mac/
|   โ”œโ”€โ”€ assembly.xml.vtl               # maven-assembly-plugin template to generate ZIP/TGZ bundles for Mac OS X
|   โ”œโ”€โ”€ customize-dmg.applescript.vtl  # DMG customization Applescript template
|   โ”œโ”€โ”€ Info.plist.vtl                 # Info.plist template
โ”‚   โ””โ”€โ”€ startup.vtl                    # Startup script template
โ””โ”€โ”€ windows/
    โ”œโ”€โ”€ assembly.xml.vtl               # maven-assembly-plugin template to generate ZIP/TGZ bundles for Windows
    โ”œโ”€โ”€ exe.manifest.vtl               # exe.manifest template
    โ”œโ”€โ”€ iss.vtl                        # Inno Setup Script template
    โ”œโ”€โ”€ msm.wxs.vtl                    # WiX Toolset WXS template to generate Merge Module
    โ””โ”€โ”€ wxs.vtl                        # WiX Toolset WXS template to generate MSI

Use default templates as examples.

An object called info of type PackagerSettings is passed to all templates with all plugin properties.

Additional JVM options at runtime

When you build your app, all configuration details are hardcoded into the executable and cannot be changed without recreating it or hacking with a resource editor. JavaPackager introduces a feature that allows to pass additional JVM options at runtime from an .l4j.ini file (like Launch4j does, but available for all platforms in the same way). So, you can specify these options in the packager's configuration (packaging time), in INI file (runtime) or in both.

The INI file's name must correspond to ${name}.l4j.ini and it has to be located next to the executable on Windows and GNU/Linux, and in Resources folder on Mac OS X.

The options should be separated with spaces or new lines:

# Additional JVM options
-Dswing.aatext=true
-Dsomevar="%SOMEVAR%"
-Xms16m

How to build and install the plugin

Useful to try SNAPSHOT versions.

Execute next commands in BASH (GNU/Linux or macOS) or CMD (Windows):

  1. Download source code and change to the project directory:
git clone https://github.com/fvarrui/JavaPackager.git
cd JavaPackager
  1. Compile, package and install the plugin in your local repository (ommit ./ on Windows):
./gradlew publishToMavenLocal

How to release the plugin to Maven Central

Run next command (ommit ./ on Windows):

./gradlew -Prelease uploadArchives closeAndReleaseRepository

Related guide.

How to release the plugin to Gradle plugin portal

Only the first time, run next command:

./gradlew login

And then, run (ommit ./ on Windows):

./gradlew publishPlugins

Related guide.

Future features

Check the TO-DO list to know the features we plan to add to JavaPackager.

Comments
  • Package from single platform to multiple platforms

    Package from single platform to multiple platforms

    Adds feature #247

    I also included an updating feature, which means that if the installed jdk in the temp directory is outdated it gets updated before being used further.

    Also integrated maven and gradle hello world projects into unit test:

    image

    Also was able to merge everything into PackageTask (merged maven and gradle package tasks + plugin extension into one with all the settings included). This makes everythig much simpler and easier to modify settings or add new ones.

    Maven is having issues with the new config I think. Doing research on that.

    opened by Osiris-Team 34
  • Icns file not being used

    Icns file not being used

    I'm submitting aโ€ฆ

    • [x] bug report
    • [ ] feature request
    • [ ] other

    Short description of the issue/suggestion: The .icns file is not being used in the .dmg or for the .app however shows up as .VolumeIcon.icns

    Steps to reproduce the issue/enhancement:

    1. Setup gradle Task like so:
    javapackager {
        mainClass = 'Launcher'
        bundleJre = true
    }
    
    task packageMyAppForMac(type: PackageTask, dependsOn: build) {
        platform = 'mac'
        macConfig {
            icnsFile = layout.projectDirectory.file('src/main/resources/icons/icon.icns').asFile
            generateDmg = true
            generatePkg = true
        }
    }
    
    1. Save .icns file under src/main/resources/icons/icon.icns
    2. run gradle packageMyAppForMac

    What is the expected behavior? build should work and have the .icns as icon

    What is the current behavior? Everything builds successfully however .app looks the following

    Do you have outputs, screenshots, demos or samples which demonstrate the problem or enhancement? image

    Please tell us about your environment:

    • JavaPackager version: 1.5.1
    • OS version: macOs BigSur 11.4
    • JDK version: OpenJdk 15.0.2
    • Build tool:
      • [ ] Maven
      • [x] Gradle

    Other information (e.g. related issues, suggestions how to fix, links for us to have context)

    bug 
    opened by LuciferUchiha 30
  • Application exists unexpectedly if packaged using 1.6.4+

    Application exists unexpectedly if packaged using 1.6.4+

    I'm submitting aโ€ฆ

    • [x] bug report
    • [ ] feature request
    • [ ] other

    Short description of the issue/suggestion: Build DMG using 1.6.5 (the latest release) but the application cannot be opened after finishing DMG installation on Mac.

    It works perfectly with 1.6.3 or any version before it but doesn't work with 1.6.4 and 1.6.5

    Steps to reproduce the issue/enhancement:

    1. Build DMG using 1.6.5
    2. Install with the recently built DMG
    3. The installed application cannot be opened anymore

    What is the expected behavior? Clicking on the application after having it installed from the DMG file, the application opens normally

    What is the current behavior? Clicking on the application after having it installed from the DMG file, the application exits unexpectedly

    Do you have outputs, screenshots, demos or samples which demonstrate the problem or enhancement?

    Screenshot 2022-04-05 at 13 58 54
    -------------------------------------
    Translated Report (Full Report Below)
    -------------------------------------
    
    Process:               java [15711]
    Path:                  /Applications/OSGi.fx.app/Contents/MacOS/universalJavaApplicationStub
    Identifier:            java
    Version:               ???
    Code Type:             X86-64 (Native)
    Parent Process:        launchd [1]
    User ID:               503
    
    Date/Time:             2022-04-05 13:52:59.7259 +0200
    OS Version:            macOS 12.1 (21C52)
    Report Version:        12
    Bridge OS Version:     6.1 (19P647)
    Anonymous UUID:        D81ECA0D-114D-03DC-A6CC-DF084E8A619D
    
    Sleep/Wake UUID:       C34800F9-286C-4573-BC33-D5431968F6D5
    
    Time Awake Since Boot: 21000 seconds
    Time Since Wake:       21048 seconds
    
    System Integrity Protection: enabled
    
    Crashed Thread:        0
    
    Exception Type:        EXC_CRASH (SIGABRT)
    Exception Codes:       0x0000000000000000, 0x0000000000000000
    Exception Note:        EXC_CORPSE_NOTIFY
    
    Termination Reason:    Namespace DYLD, Code 1 Library missing
    Library not loaded: @rpath/libjli.dylib
    Referenced from: /Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/java
    Reason: tried: '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/./libjli.dylib' (no such file), '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/../lib/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/lib/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/./libjli.dylib' (no such file), '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/../lib/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/lib/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with cust
    (terminated at launch; ignore backtrace)
    
    Application Specific Information:
    Library not loaded: @rpath/libjli.dylib
    Referenced from: /Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/java
    Reason: tried: '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/./libjli.dylib' (no such file), '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/../lib/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/lib/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/./libjli.dylib' (no such file), '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/bin/../lib/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '/Applications/OSGi.fx.app/Contents/PlugIns/jre/Contents/Home/lib/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with cust
    
    
    Thread 0 Crashed:
    0   dyld                          	       0x10acaa0ce __abort_with_payload + 10
    1   dyld                          	       0x10acc01cf abort_with_payload_wrapper_internal + 80
    2   dyld                          	       0x10acc0201 abort_with_payload + 9
    3   dyld                          	       0x10ac6e613 dyld4::halt(char const*) + 375
    4   dyld                          	       0x10ac6a55d dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3955
    5   dyld                          	       0x10ac694b4 start + 388
    
    
    Thread 0 crashed with X86 Thread State (64-bit):
      rax: 0x0000000002000209  rbx: 0x0000000000000000  rcx: 0x00007ff7bf900438  rdx: 0x00007ff7bf9008a0
      rdi: 0x0000000000000006  rsi: 0x0000000000000001  rbp: 0x00007ff7bf900480  rsp: 0x00007ff7bf900438
       r8: 0x00007ff7bf9004a0   r9: 0x0000000000000000  r10: 0x000000000000006e  r11: 0x0000000000000246
      r12: 0x000000000000006e  r13: 0x00007ff7bf9008a0  r14: 0x0000000000000001  r15: 0x0000000000000006
      rip: 0x000000010acaa0ce  rfl: 0x0000000000000246  cr2: 0x000000010ac70e3c
      
    Logical CPU:     0
    Error Code:      0x02000209 
    Trap Number:     133
    
    
    Binary Images:
           0x10ac64000 -        0x10accffff dyld (*) <cef5a27a-d50b-3020-af03-1734b19bc8c5> /usr/lib/dyld
    
    External Modification Summary:
      Calls made by other processes targeting this process:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
      Calls made by this process:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
      Calls made by all processes on this machine:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
    
    VM Region Summary:
    ReadOnly portion of Libraries: Total=652K resident=0K(0%) swapped_out_or_unallocated=652K(100%)
    Writable regions: Total=9220K written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=9220K(100%)
    
                                    VIRTUAL   REGION 
    REGION TYPE                        SIZE    COUNT (non-coalesced) 
    ===========                     =======  ======= 
    STACK GUARD                       56.0M        1 
    Stack                             8192K        1 
    VM_ALLOCATE                         12K        3 
    __DATA                              20K        2 
    __DATA_CONST                        80K        1 
    __LINKEDIT                         240K        4 
    __TEXT                             436K        2 
    dyld private memory               1024K        1 
    ===========                     =======  ======= 
    TOTAL                             65.8M       15 
    
    
    
    -----------
    Full Report
    -----------
    
    {"app_name":"java","timestamp":"2022-04-05 13:52:59.00 +0200","app_version":"","slice_uuid":"055cde84-0613-3803-9cb9-4e216b81e0ed","build_version":"","platform":1,"share_with_app_devs":0,"is_first_party":1,"bug_type":"309","os_version":"macOS 12.1 (21C52)","incident_id":"983788D7-E033-4EBF-B4C0-64FA1D8AB506","name":"java"}
    {
      "uptime" : 21000,
      "procLaunch" : "2022-04-05 13:52:55.6567 +0200",
      "procRole" : "Background",
      "version" : 2,
      "userID" : 503,
      "deployVersion" : 210,
      "modelCode" : "MacBookPro15,2",
      "procStartAbsTime" : 21243264570265,
      "coalitionID" : 4319,
      "osVersion" : {
        "train" : "macOS 12.1",
        "build" : "21C52",
        "releaseType" : "User"
      },
      "captureTime" : "2022-04-05 13:52:59.7259 +0200",
      "incident" : "983788D7-E033-4EBF-B4C0-64FA1D8AB506",
      "bug_type" : "309",
      "pid" : 15711,
      "procExitAbsTime" : 21247333361034,
      "cpuType" : "X86-64",
      "procName" : "java",
      "procPath" : "\/Applications\/OSGi.fx.app\/Contents\/MacOS\/universalJavaApplicationStub",
      "parentProc" : "launchd",
      "parentPid" : 1,
      "coalitionName" : "com.osgifx",
      "crashReporterKey" : "D81ECA0D-114D-03DC-A6CC-DF084E8A619D",
      "wakeTime" : 21048,
      "bridgeVersion" : {"build":"19P647","train":"6.1"},
      "sleepWakeUUID" : "C34800F9-286C-4573-BC33-D5431968F6D5",
      "sip" : "enabled",
      "isCorpse" : 1,
      "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
      "termination" : {"code":1,"flags":518,"namespace":"DYLD","indicator":"Library missing","details":["(terminated at launch; ignore backtrace)"],"reasons":["Library not loaded: @rpath\/libjli.dylib","Referenced from: \/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/java","Reason: tried: '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/.\/libjli.dylib' (no such file), '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/..\/lib\/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/lib\/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/.\/libjli.dylib' (no such file), '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/..\/lib\/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/lib\/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with cust"]},
      "asi" : {"dyld":["Library not loaded: @rpath\/libjli.dylib","Referenced from: \/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/java","Reason: tried: '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/.\/libjli.dylib' (no such file), '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/..\/lib\/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/lib\/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/.\/libjli.dylib' (no such file), '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/bin\/..\/lib\/libjli.dylib' (code signature in <366E8331-0250-383A-B5D7-C02420BA71E5> '\/Applications\/OSGi.fx.app\/Contents\/PlugIns\/jre\/Contents\/Home\/lib\/libjli.dylib' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with cust"]},
      "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
      "faultingThread" : 0,
      "threads" : [{"triggered":true,"id":272997,"threadState":{"r13":{"value":140702047537312},"rax":{"value":33554953},"rflags":{"value":582},"cpu":{"value":0},"r14":{"value":1},"rsi":{"value":1},"r8":{"value":140702047536288},"cr2":{"value":4475784764},"rdx":{"value":140702047537312},"r10":{"value":110},"r9":{"value":0},"r15":{"value":6},"rbx":{"value":0},"trap":{"value":133},"err":{"value":33554953},"r11":{"value":582},"rip":{"value":4476018894,"matchesCrashFrame":1},"rbp":{"value":140702047536256},"rsp":{"value":140702047536184},"r12":{"value":110},"rcx":{"value":140702047536184},"flavor":"x86_THREAD_STATE","rdi":{"value":6}},"frames":[{"imageOffset":286926,"symbol":"__abort_with_payload","symbolLocation":10,"imageIndex":0},{"imageOffset":377295,"symbol":"abort_with_payload_wrapper_internal","symbolLocation":80,"imageIndex":0},{"imageOffset":377345,"symbol":"abort_with_payload","symbolLocation":9,"imageIndex":0},{"imageOffset":42515,"symbol":"dyld4::halt(char const*)","symbolLocation":375,"imageIndex":0},{"imageOffset":25949,"symbol":"dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)","symbolLocation":3955,"imageIndex":0},{"imageOffset":21684,"symbol":"start","symbolLocation":388,"imageIndex":0}]}],
      "usedImages" : [
      {
        "source" : "P",
        "arch" : "x86_64",
        "base" : 4475731968,
        "size" : 442368,
        "uuid" : "cef5a27a-d50b-3020-af03-1734b19bc8c5",
        "path" : "\/usr\/lib\/dyld",
        "name" : "dyld"
      }
    ],
      "sharedCache" : {
      "base" : 140703484620800,
      "size" : 15216738304,
      "uuid" : "40432a03-88d3-305f-9c0c-e7549e71d927"
    },
      "vmSummary" : "ReadOnly portion of Libraries: Total=652K resident=0K(0%) swapped_out_or_unallocated=652K(100%)\nWritable regions: Total=9220K written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=9220K(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nSTACK GUARD                       56.0M        1 \nStack                             8192K        1 \nVM_ALLOCATE                         12K        3 \n__DATA                              20K        2 \n__DATA_CONST                        80K        1 \n__LINKEDIT                         240K        4 \n__TEXT                             436K        2 \ndyld private memory               1024K        1 \n===========                     =======  ======= \nTOTAL                             65.8M       15 \n",
      "legacyInfo" : {
      "threadTriggered" : {
    
      }
    },
      "trialInfo" : {
      "rollouts" : [
        {
          "rolloutId" : "60da5e84ab0ca017dace9abf",
          "factorPackIds" : {
    
          },
          "deploymentId" : 240000008
        },
        {
          "rolloutId" : "607844aa04477260f58a8077",
          "factorPackIds" : {
            "SIRI_MORPHUN_ASSETS" : "6103050cbfe6dc472e1c982a"
          },
          "deploymentId" : 240000066
        },
        {
          "rolloutId" : "602ad4dac86151000cf27e46",
          "factorPackIds" : {
            "SIRI_DICTATION_ASSETS" : "6193d03f2171a2330e561dfc"
          },
          "deploymentId" : 240000303
        },
        {
          "rolloutId" : "601d9415f79519000ccd4b69",
          "factorPackIds" : {
            "SIRI_TEXT_TO_SPEECH" : "621d4d0f680160486b9e1c98"
          },
          "deploymentId" : 240000416
        },
        {
          "rolloutId" : "60356660bbe37970735c5624",
          "factorPackIds" : {
    
          },
          "deploymentId" : 240000027
        },
        {
          "rolloutId" : "5ffde50ce2aacd000d47a95f",
          "factorPackIds" : {
    
          },
          "deploymentId" : 240000128
        },
        {
          "rolloutId" : "5fb4245a1bbfe8005e33a1e1",
          "factorPackIds" : {
    
          },
          "deploymentId" : 240000014
        },
        {
          "rolloutId" : "5fc94383418129005b4e9ae0",
          "factorPackIds" : {
    
          },
          "deploymentId" : 240000313
        }
      ],
      "experiments" : [
    
      ]
    }
    }
    
    Model: MacBookPro15,2, BootROM 1715.60.5.0.0 (iBridge: 19.16.10647.0.0,0), 4 processors, Quad-Core Intel Core i5, 2,4 GHz, 16 GB, SMC 
    Graphics: Intel Iris Plus Graphics 655, Intel Iris Plus Graphics 655, Built-In
    Display: Color LCD, 2560 x 1600 Retina, Main, MirrorOff, Online
    Memory Module: BANK 0/ChannelA-DIMM0, 8 GB, LPDDR3, 2133 MHz, Samsung, K4EBE304EC-EGCG
    Memory Module: BANK 2/ChannelB-DIMM0, 8 GB, LPDDR3, 2133 MHz, Samsung, K4EBE304EC-EGCG
    AirPort: spairport_wireless_card_type_wifi (0x14E4, 0x7BF), wl0: Jul 12 2021 19:26:30 version 9.30.464.0.32.5.76 FWID 01-45ccefcd
    Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
    Network Service: Wi-Fi, AirPort, en0
    USB Device: USB31Bus
    USB Device: T2Bus
    USB Device: Touch Bar Backlight
    USB Device: Touch Bar Display
    USB Device: Apple Internal Keyboard / Trackpad
    USB Device: Headset
    USB Device: Ambient Light Sensor
    USB Device: FaceTime HD Camera (Built-in)
    USB Device: Apple T2 Controller
    Thunderbolt Bus: MacBook Pro, Apple Inc., 47.5
    Thunderbolt Bus: MacBook Pro, Apple Inc., 47.5
    

    What is the motivation / use case for changing the behavior?

    Please tell us about your environment:

    • JavaPackager version: 1.6.5
    • OS version: 12.1
    • JDK version: 17.0.2
    • Build tool:
      • [ ] Maven
      • [x] Gradle

    Other information (e.g. related issues, suggestions how to fix, links for us to have context)

    If you are wondering why I am not using jpackage, there is a strong reason for it. I have been banging my head around about a month but the application after having installed from the DMG built by jpackage cannot be opened at all. It can only be opened if I start the application from command line. But it works perfectly if I use JavaPackager. That's why I had to switch to JavaPacakger once again.

    fixed 
    opened by amitjoy 28
  • Simplifies/Unifies settings + JUnit tests + auto JDK download

    Simplifies/Unifies settings + JUnit tests + auto JDK download

    Contains following breaking changes:

    • Gradle users must encapsulate their task settings inside a javapackager extension, except for the win/linux/mac configs, manfiest and scripts closures.
    Show example
    task packageMyApp(type: io.github.fvarrui.javapackager.GradlePackageTask, dependsOn: build) {
        javapackager{
            // mandatory
            mainClass = 'path.to.your.mainClass'
            // optional
            bundleJre = true|false
            generateInstaller = true|false
            administratorRequired = true|false
            platform = auto|linux|mac|windows
            additionalResources = [ file('file path'), file('folder path'), ... ]
        }
        linuxConfig {
            ...
        }
        macConfig {
            ...
        }
        winConfig {
            ...
        }
        manifest {
            ....
        }
        scripts {
            ...
        }
        ...
    }
    
    • Maven users would need to rename their name property to appName.
    opened by Osiris-Team 27
  • The generated runnable jar is not a fat jar (dependencies not included)

    The generated runnable jar is not a fat jar (dependencies not included)

    Thanks for making this plugin.

    I'm submitting aโ€ฆ

    • [x] bug report
    • [ ] feature request
    • [ ] other

    Short description of the issue/suggestion:

    The generated application crashes. After investigation, it's because the runnable start generated by the plugin is not a fat jar (standalone application), it doesn't include the dependencies required by the application.

    Steps to reproduce the issue/enhancement:

    1. Create an application with a dependency
    2. Run the plugin
    3. Try to run the generated runnable jar

    What is the expected behavior?

    The generated runnable jar should run as a standalone application. It should be a fat jar with all dependencies required by the application included.

    What is the current behavior?

    The runnable jar crashes with a java.lang.ClassNotFoundException because it doesn't find the class required in the dependency.

    Do you have outputs, screenshots, demos or samples which demonstrate the problem or enhancement?

    It's a private project... If my description is not good enough, please let me know and I will try to create a simple reproducer.

    What is the motivation / use case for changing the behavior?

    Just make it work :)

    Please tell us about your environment:

    • JavaPackager version: 1.6.6
    • OS version: macOS, Linux, Windows (I tested on different machines, same problem)
    • JDK version: 18
    • Build tool:
      • [x] Maven
      • [ ] Gradle

    Other information (e.g. related issues, suggestions how to fix, links for us to have context)

    Thank you!

    bug fixed 
    opened by salmonb 26
  • Error at start on Windows

    Error at start on Windows

    Hello,

    I probably miss something but when i try to execute my generate exe it not start. After i start it in a powershell shell it says it canโ€™t find my main class but the fat jar build start without trouble with a :

    java -jar mydot.jar
    

    This is my relevant pom part :

                <plugin>
                    <groupId>io.github.fvarrui</groupId>
                    <artifactId>javapackager</artifactId>
                    <version>1.1.0</version>
                    <executions>
                        <execution>
                            <id>windows</id>
                            <phase>package</phase>
                            <goals>
                                <goal>package</goal>
                            </goals>
                            <configuration>
                                
                                <mainClass>com.mytestcompany.mytestproject.Main</mainClass>
                                
                                <bundleJre>false</bundleJre>
                                <runnableJar>target/mydot.jar</runnableJar>
                                <copyDependencies>false</copyDependencies>
                                <generateInstaller>true</generateInstaller>        
                                <administratorRequired>true</administratorRequired>
                                
                                <platform>windows</platform>
                                <winConfig>
                                    <generateSetup>true</generateSetup>
                                    <generateMsi>true</generateMsi>
                                    <headerType>console</headerType>
                                </winConfig>
                        </configuration>
                        </execution>
                   </executions>
               </plugin>
    

    For the record my main javafx class is already in a wrapper java main class.

    opened by HumanG33k 26
  • Can not bundle my own fat jar

    Can not bundle my own fat jar

    Can not bundle my own fat jar

    Please don't care about errors, if there are some (I'm french).

    I've tried to bundle my own fat jar using <runnableJar>, but the plugin can't found my jar. (The logs shows me : 'Application jar does not exists'). I don't know if my path is wrong, or if I need to add the extension .jar. I tried to indicate the position of the jar from the project's root.

    With an absolute path, it seems to work, it founds the jar, but the log indicates that the output file couldn't be opened after launch4j "Linking" operation.

    Hope it's clear (and it helps) !

    opened by MartinHeywang 23
  • MacOS startup file format issue

    MacOS startup file format issue

    Hi Fran,

    thank you for this plugin. I started experimenting with it with MacOS Mojave 10.14.6 under Netbeans 11.2 and JDK 13.0.1 and JDK 1.8.0_77 and have some problems:

    1. The first one is that I cannot start the app because the script <appName.sh>/Contents/MacOS/startup contains DOS/Windows newlines (with (hidden) ^M). After opening the script in vi and issuing the command ":set fileformat=unix" and resaving it the application starts.

    2. When I embed a JDK the code signing doesn't work, it gives an error: [info] Executing command: codesign --force --deep --sign - /Users/marco/Developer/phPatcher/target/app/phPatcher.app [error] /Users/marco/Developer/phPatcher/target/app/phPatcher.app: bundle format unrecognized, invalid, or unsuitable [error] In subcomponent: /Users/marco/Developer/phPatcher/target/app/phPatcher.app/Contents/PlugIns/jre/Contents/Home/legal/java.management.rmi

    3. By correcting the script as described on point 1 and by not embedding the JDK I can run the app by executing the script on CLI, but if I double click the App on the GUI it opens for a second and then it closes again. Still figuring out what the problem can be. I'll let you know.

    opened by mristuccia 23
  • Specify file associations

    Specify file associations

    I'm submitting aโ€ฆ

    • [ ] bug report
    • [x] feature request
    • [ ] other

    Short description of the issue/suggestion:

    We are able to specify file associations in jpackage (through the --file-associations switch). I would like to have the ability to do this too, using this plugin. I read through the source, and I cannot find how to do this. In fact, it appears that we are entirely unable to specify file associations.

    What is the expected behavior?

    Have a configuraiton property named fileAssociations in which we are able to specify these associations.

    What is the current behavior?

    Thereยดs no way to specify these associations.

    What is the motivation / use case for changing the behavior?

    It is sometimes desired to register the java application to open certain files.

    Please tell us about your environment:

    • JavaPackager version: 1.5.1
    • OS version: Arch Linux on kernel 5.11
    • JDK version: OpenJDK 15.0.2 JDK
    • Build tool:
      • [x] Maven
      • [ ] Gradle
    enhancement 
    opened by rhbvkleef 22
  • Change default task manager processes name

    Change default task manager processes name

    I'm submitting aโ€ฆ

    • [ ] bug report
    • [x] feature request
    • [ ] other

    Short description of the issue/suggestion: The task manager processes name not use the application name, instead use default Java platform name. In my case, the name is "OpenJDK Platform Binary"

    What is the expected behavior? Task manager process name should use the application name

    Do you have outputs, screenshots, demos or samples which demonstrate the problem or enhancement? Screenshot : Task Manager Process Name

    What is the motivation / use case for changing the behavior? Make a difference name between the software on task manager

    Please tell us about your environment:

    • JavaPackager version: 1.5.1
    • OS version: Windows 10
    • JDK version: 15
    • Build tool:
      • [x] Maven
      • [ ] Gradle

    Other information (e.g. related issues, suggestions how to fix, links for us to have context)

    enhancement 
    opened by NMNaufaldo 22
  • Could not find or load main class

    Could not find or load main class

    I'm submitting aโ€ฆ

    • [X] bug report
    • [ ] feature request
    • [ ] other

    Short description of the issue/suggestion:

    My bundled app fails to start. I took a look at the Logs, there I see universalJavaApplicationStub log:

    [EXEC] "/Applications/MyApp.app/Contents/PlugIns/jre/Contents/Home/bin/java" -cp ".:Java/MyApp-1.0.11-runnable.jar" -Xdock:icon="/Applications/MyApp.app/Contents/Resources/MyApp.icns" -Xdock:name="MyApp" com.kerner1000.myapp.Launcher

    When I try to manually invoke, I get the following error:

    Error: Could not find or load main class com.kerner1000.myapp.Launcher
    Caused by: java.lang.ClassNotFoundException: com.kerner1000.myapp.Launcher
    

    When I extract MyApp-1.0.11-runnable.jar, I can find the class inside, so it is there. I don't know why it cannot be loaded.

    Now, when I try the following, it works:

    "/Applications/MyApp.app/Contents/PlugIns/jre/Contents/Home/bin/java" -cp "/Applications/MyApp.app/Contents/Resources/Java/MyApp-1.0.11-runnable.jar" -Xdock:icon="/Applications/MyApp.app/Contents/Resources/MyApp.icns" -Xdock:name="MyApp" com.kerner1000.myapp.Launcher

    Note the absolute path for the classpath argument.

    Do it need to specify the classpath or is this a bug when using a custom JRE?

    bug help wanted 
    opened by kerner1000 21
Releases(v1.6.7)
  • v1.6.7(Jul 18, 2022)

    Features:

    • AppImage packaging supported for GNU/Linux (#169)
    • New property macConfig.hardenedCodesign to enable/disable hardened codesigning.
    • Default entitlements when macConfig.entitlements not specified.
    • New property macConfig.macStartup to choose app startup type on Mac OS (script|binary) (thanks to @AstroPixelProcessor) (#187)
    • Add support for a .provisionprofile file on Mac OS (thanks to @kerner1000) (#224)
    • New EXE creation tool: why.

    Fixed issues:

    • #184 DMG creation fails on macOS Big Sur 11.0.1 on M1 hardware (aarch64) (thanks to @AstroPixelProcessor)
    • #185 Application exists unexpectedly if packaged using 1.6.4+
    • #197 Fixed when using file associations with Gradle.
    • #204 Wrong dependencies included in runnable JAR when packaging with Maven.
    • #213 scritps property causes problems (since class not serializable) when using the default task with Gradle.
    • #214 Linux executable doesn't start if under a path with spaces.
    Source code(tar.gz)
    Source code(zip)
  • v1.6.6(Apr 7, 2022)

    Fixed issues:

    • #175 Snapshot builds fail RPM packaging.
    • #174 Linux DEB package does not set correct permission on jre/lib/jspawnhelper (thanks to @AstroPixelProcessor).
    • #173 WinRun4j executables do not respect program arguments in app.l4j.ini (thanks to @keastrid).
    • #172 Generate windows setups from docker inno setup image.
    • #155 Keep permisions of additionalResources on packaging [Linux].
    Source code(tar.gz)
    Source code(zip)
  • v1.6.5(Mar 10, 2022)

  • v1.6.4(Mar 3, 2022)

    Fixed issues:

    • #146 Windows: Could not initialize class net.sf.launch4j.config.ConfigPersister.
    • #150 A suitable of java could not be found on your system (new property winConfig.vmLocation).
    • #155 Keep permisions of additionalResources on packaging [Linux].
    • #159 Default template for winrun4j does not correctly specify/verify jvm.dll location for all runtimes (related to #150).
    • #161 Codesign command on macOS does not include Hardened Runtime, so can not pass notarization.
    Source code(tar.gz)
    Source code(zip)
  • v1.6.3(Feb 11, 2022)

    New minor features:

    • New winConfig.exeCreationTool property to choose the EXE generation tool: launch4j or winrun4j (#93).
    • New winConfig.disableWelcomePage property to enable|disable welcome page in Setup installer (#130).
    • New winConfig.removeOldLibs property to choose if old libs folder has to be removed when installing from Setup (#137).
    • New macConfig.infoPlist.additionalEntries property to add custom entries to Info.plist file (#143).
    • New macConfig.infoPlist.bundlePackageType property to customize CFBundlePackageType key in Info.plist file.

    Fixed issues:

    • #144 Failure to generate MSI installer: "error CNDL0014 : The Module/@Id attribute's value is not a legal identifier".
    Source code(tar.gz)
    Source code(zip)
  • v1.6.2(Oct 3, 2021)

  • v1.6.1(Sep 23, 2021)

  • v1.6.0(Sep 10, 2021)

    New features:

    • New winConfig.registry property to specify registry entries to be added to Windows Registry during the installation (only Setup) (#91).
    • New additionalModulePaths property to specify additional module paths for jdeps (#97).
    • Removed iconFile property as it's deprecated. Use winConfig.icoFile, linuxConfig.pngFile and/or macConfig.icnsFile instead.
    • Added macConfig.codesignApp property to disable Mac OS app codesigning (#99).
    • Added fileAssociations property to specify file associations to the app (#103)
    • Added packagingJdk property to specify the toolchains to use (#111) (thanks to @keastrid).
    • DEB and RPM generation when building with Gradle (#115).
    • Allow for a "bootstrap" script (new scripts.bootstrap property) to be run before application start (#122).
    • Added linuxConfig.wrapJar property to disable combining startup script and runnable jar (#123).

    Fixed issues:

    • #90: Windows exe creation failed when app uses Chinese characters.
    • #95: Fixed syntax error in XML tag in Linux specific properties documentation (thanks to @swissbuechi).
    • #108: Plugin fails on Java 16; launch4j-maven-plugin upgraded to v2.1.1 (thanks to @mica-alex)
    • #112: Fixed issue running on Gradle 7 due to afterEvaluate (thanks to @keastrid)
    • #114: Fixed ICNS file not being used.
    • #119: gradle-launch4j plugin version downgraded to v2.4.7 due to newer breaks existing builds.
    • #120: Fixed jspawnhelper doesn't have 755 permissions after embedding an existing JRE.
    • #125: Breaking change when bundling JRE on Mac in 1.2.0+.
    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(Jan 25, 2021)

    Fixed issues:

    • NPE when manifest property is not specified in Gradle (Oops! :sweat_smile:)
    • #88, bundleJre does not check if the JRE path for Mac distributions already contains "Contents/Home" before appending it
    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Jan 18, 2021)

    New features:

    • Added winConfig.signing property to code sign Windows executables and installers (Setup and MSI) (#82).
    • Upgraded Mac OS startup script (universalJavaApplicationStub) to v3.1.0 (#83).

    Fixed issues:

    • #85, macOS useSystemMenuBarProperty().set(true) is overridden by package phase when opening .app (fixed with #83)
    Source code(tar.gz)
    Source code(zip)
  • v1.4.2(Dec 5, 2020)

    New minor features:

    • #75, Added new property winConfig.setupMode, with 3 possible values:
      • installForAllUsers (default value, to keep the old behaviour): installs the app for the all users (behaviour can be changed via command-line with /currentuser argument). App installed in %ProgramFiles% folder.
      • installForCurrentUser: installs the app for the current user (behaviour can be changed via command-line with /allusers argument. App installed in %USERPROFILE%\AppData\Local\Programs folder.
      • askTheUser: asks to the final user if the app has to be installed for all users or only for the current user.
    • #77, Added new property jreMinVersion, allowing to the generated executable to check if a minimum JRE version is installed.
    • #79, Added new property manifest, allowing to add additional manifest entries and sections.
    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Nov 15, 2020)

    Fixed issues and patches:

    • #73, DMG image generation stops with error if destination file already exists when compressing DMG on Mac OS X.
    • #74, Link to /Applications created directly in the mounted volume instead of build directory on Mac OS (fix a performance issue on IDE).
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Nov 6, 2020)

    New features:

    • Added classpath property to specify additional paths to JVM classpath (#70).
    • Added macConfig.appId property to specify a unique identifier for the generated app on Mac OS (mainClass is used by default).
    • Added macConfig.developerId and macConfig.entitlements properties to be used when signing the generated app on Mac OS (#69)
    • Added the posibility to use ${name}.l4j.ini config file (available for all platforms) to specify VM arguments (#66)
    • Added macConfig.relocateJar to specify if Jar files are relocated in Java folder or not. Thanks to @keastrid (#63)

    Fixed issues:

    • #62, NullPointerException is thrown when bundleJre=true and copyDependencies=false.
    • #64, Impossible to generate two Windows executables.
    • #68, Mac package prompts users to install Java 6, changing Info.plist from Apple to Oracle style.
    • #71, Error when generating DMG file on Mac OS X: Command execution failed: chmod -Rf go-w, adding user read permissions when generating DMG. Thanks to @treimers.
    • #72, Problems on create Zipball when used together with "outputDirectory".
    • #73, "mvn package" stops with error on Mac OS X when DMG file already exists: "hdiutil: create failed - file exists". Thanks to @treimers.
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Oct 17, 2020)

    • New features:
      • MSI merge module generation (MSM):
        • Added property winConfig.generateMsm.
        • Added template msm.wxs.vtl.
        • Updated MSI template wxs.vtl to use the generated merge module.
      • Gradle:
        • Added default task package, which is configured using javapackager extension.
        • Packaging tasks are now configured by default using values from javapackager extension.
    • Fixed issues:
      • #54, vmArgs invalid on Mac OS X. Thanks to @airlenet.
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Sep 21, 2020)

    • New features:
      • Now JavaPackager is also available as a Gradle plugin ๐Ÿฅณ
      • Icons:
        • New properties added for each platform to specify icons instead of put them in assets folder (winConfig.icoFile, linuxConfig.pngFile, linuxConfig.xpmFile and macConfig.icnsFile)
        • :warning: iconFile property deprecated
      • Tarball/zipball generation:
        • Execution permissions are now set to the proper files.
        • tar files are no longer generated, only tar.gz.
      • Windows Setup language customization:
      <winConfig>
          <setupLanguages>
              <english>compiler:Default.isl</english>
              <french>compiler:Languages\French.isl</french>
              <german>compiler:Languages\German.isl</german>
          </setupLanguages>
      </winConfig>
      
    • Issues fixed:
      • #41, Error at start on Windows (see winConfig.wrapJar property)
      • #42, Add verification on project name
      • #43, building for different OS with optimized JRE (see jdkPath property)
      • #47, Package artifact as Windows Merge module (see winConfig.generateMsm)
      • #48, Configure language installer (see winConfig.setupLanguages map property)
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Jun 30, 2020)

  • v1.0.3(Jun 16, 2020)

    • New properties added:
      • assetsDir: allows to customize assets folder, where icons and custom templates are stored.
    • Bugs fixed, thanks to @ogerardin!
      • #36: fixed CommandUtils.execute() method and added delay after mounting DMG file and before run applescript.
      • #37: fixed typo in documentation.
      • #38: fixed with new property assetsDir, which now is relative to ${basedir}.
      • #39: fixed missing double quotes in startup scripts when names with whitespaces are used.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Jun 11, 2020)

    Fixed an issue related to startup and universalJavaApplicationStub scripts execution permissions on Mac OS. Previous version (v1.0.1) setted execution permissions only for owner.

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Jun 9, 2020)

    Fixed a problem when running generated app on Mac OS

    universalJavaApplicationStub: /bin/bash^M: bad interpreter: no such file or directory
    

    due to universalJavaApplicationStub LF-endings were being replaced with CRLF when releasing to Maven Central from Windows.

    More info: https://stackoverflow.com/questions/11868590/maven-release-plugin-and-windows-line-breaks

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Jun 6, 2020)

    • Major refactoring permorfed:
      • Packaging code is now structured by platform.
    • Bugs fixed:
      • Issue #33: now it uses universalJavaApplicationStub script to start the app on Mac, so it can find the right JVM when JRE is not bundled. Thanks to @jdimeo!
      • Issue #34: fixed the problem when running commands using paths with whitespaces.
      • DEB and RPM generation failed when JRE was not bundled.
    • Plugin output improved.
    • New features:
      • PKG package installer generation on Mac OS X.
      • MSI installer generation on Windows.
    • New properties:
      • useResourcesAsWorkingDir: If enabled, it sets app working directory to same directory as additional resources at startup. Useful when app is focused to GUI or to console.
      • extra: Map with extra properties to use in customized Velocity templates.
      • winConfig.headerType: Allows to create a Windows executable for GUI or for console.
      • windowsConfig.generateSetup and windowsConfig.generateMsi: Allows to enable/disable installers generation on Windows.
      • macConfig.generatePkg and macConfig.generateDmg: Allows to enable/disable installers generation on Mac OS X.
      • linuxConfig.generateDeb and linuxConfig.generateRpm: Allows to enable/disable installers generation on GNU/Linux.
      • winConfig properties to customize Setup installer generation:
        • disableDirPage: disables page to choose installation directory.
        • disableProgramGroupPage: disables page to choose program group.
        • disableFinishedPage: disables summary page.
        • createDesktopIconTask: disables page to choose if creating an icon on the desktop.
    • Generated tarball and zipball renamed by platform:
      • ${name}-${version}-${platform}.zip
      • ${name}-${version}-${platform}.tar
      • ${name}-${version}-${platform}.tar.gz
    • Properties removed:
      • versionInfo deprecated property removed.
    Source code(tar.gz)
    Source code(zip)
  • v0.9.7(Apr 24, 2020)

  • v0.9.6(Apr 19, 2020)

    • Renamed versionInfo property (now deprecated) as winConfig.
    • Enhanced DMG disk image generation, based on create-dmg project:
      • Added property macConfig, as a set of new properties to customize DMG generation.

    image

    Source code(tar.gz)
    Source code(zip)
  • v0.9.5(Apr 16, 2020)

    Fixed issues:

    • #25: Now it's used rpm-maven-plugin in order to generate RPM package (alien command is not needed anymore and there's no need to generate DEB package before).
    • #27: it checks if libs folder exists before determining required modules with jdeps.
    • #28: documentation was wrong about mac assets folder name.
    Source code(tar.gz)
    Source code(zip)
  • v0.9.4(Mar 18, 2020)

    • Added properties jreDirectoryName and versionInfo required on issue #22:
    <jreDirectoryName>jre</jreDirectoryName>
    <versionInfo>
        <fileVersion>1.0.0.0</fileVersion>
        <txtFileVersion>${version}</txtFileVersion>
        <productVersion>1.0.0.0</productVersion>
        <txtProductVersion>${version}</txtProductVersion>
        <fileDescription>${description}</fileDescription>
        [...]
    </versionInfo>
    
    • Added properties createZipballand createTarball to bundle app in ZIP and TAR/TAR.GZ:
    <createTarball>true|false</createTarball>
    <createZipball>true|false</createZipball>
    
    Source code(tar.gz)
    Source code(zip)
  • v0.9.3(Mar 10, 2020)

  • v0.9.1(Mar 10, 2020)

  • v0.9.0(Mar 6, 2020)

  • v0.8.9(Jan 26, 2020)

  • v0.8.8(Jan 16, 2020)

    • Added properties runnableJar and copyDependencies to allow use of your own jar (fixed #12).
    <runnableJar>true|false</runnableJar>
    <copyDependencies>true|false</copyDependencies>
    
    • Added property platform to allow packaging for different OS than host (fixed #13).
    <platform>auto|linux|mac|windows</platform>
    
    • Added property vmArgs to allow custom VM arguments (e.g. -Xmx4G) (fixed #14).
    <vmArgs>
        <param>-Xmx4G</param>
    </vmArgs>
    
    • Added property envPath to allow setting PATH environment variable in GNU/Linux and MacOs startup scripts.
    <envPath>/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin</envPath>
    
    • Fixed error when determining module dependencies on MacOS and GNU/Linux, due to library files specified as *.jar were not being expanded when calling jdeps.
    • Also, now it's possible to use your own Velocity templates to customize some generated artifacts (startup, startup.sh, iss file, ...)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.7(Jan 14, 2020)

    • Fixed #11:
      • codesign error on MacOS
    • Config options removed (deprecated) because are no longer necessary:
      • forceJreOptimization: it has been replaced for customizedJre
      • moduleDependenceAnalysisOption: now the right option is choosed by the plugin, depending on JDK version
    • Module depedence analysis fixed and enhanced.
    Source code(tar.gz)
    Source code(zip)
Owner
Francisco Vargas Ruiz
Computer engineer working as professional training teacher.
Francisco Vargas Ruiz
Packages your JAR, assets and a JVM for distribution on Windows, Linux and Mac OS X

About Packages your JAR, assets and a JVM for distribution on Windows, Linux and macOS, adding a native executable file to make it appear like a nativ

libgdx 2.4k Dec 24, 2022
Spotless-intellij-gradle - An IntelliJ plugin to allow running the Spotless gradle task from within the IDE.

Spotless Intellij Gradle An IntelliJ plugin to allow running the spotless gradle task from within the IDE on the current file selected in the editor.

Ryan Gurney 30 Dec 17, 2022
Maven plugin to help creating CHANGELOG by keeping one format and solving merge request conflicts problem by extraction of new CHANGELOG entries to seperate files.

keep-changelog-maven-plugin CHANGELOG.md is one of the most important files in a repository. It allows others to find out about the most important cha

Piotr Zmilczak 22 Aug 28, 2022
maven plugin for making chmod +x jar files

To use it, add a plugin to your pom like <!-- You need to build an exectuable uberjar, I like Shade for that --> <plugin> <groupId>org.apache.mave

Brian McCallister 113 Dec 8, 2022
Launch4j Maven Plugin

Launch4j Maven Plugin

Lukasz Lenart 301 Dec 29, 2022
AspectJ Maven Plugin

AspectJ Maven Plugin Overview This plugin weaves AspectJ aspects into your classes using the AspectJ compiler ajc. Typically, aspects are used in one

null 19 Dec 9, 2022
JitPack is a novel package repository for JVM and Android projects.

JitPack is a novel package repository for JVM and Android projects. It builds Git projects on demand and provides you with ready-to-use artifacts (jar, aar).

JitPack 2.3k Dec 27, 2022
Plugin-fineagent - A plugin for the ja-netfilter, it allows you to use fineagent in ja-netfilter.

plugin-fineagent A plugin for the ja-netfilter, it allows you to use fineagent in ja-netfilter. Use the mvn clean package command to compile and use F

null 19 Jun 25, 2022
HopLa Burp Suite Extender plugin - Adds autocompletion support and useful payloads in Burp Suite

HopLa ?? All the power of PayloadsAllTheThings, without the overhead. This extension adds autocompletion support and useful payloads in Burp Suite to

Synacktiv 522 Dec 24, 2022
Ask and replay plugin for Mirai-Console

EntryLib EntryLib ๆ˜ฏไธ€ไธชๅŸบไบŽ Mirai-Console ็š„ๆ’ไปถ๏ผŒ็”จไบŽๅฎž็Žฐ็พค่ฏๆกใ€่‡ชๅฎšไน‰ๅ›žๅคๆˆ–ๆ›ดๅคšๅŠŸ่ƒฝใ€‚ ็›ฎๅฝ• ๅฃฐๆ˜Ž ไฝฟ็”จๆ–นๆณ• ๅŸบๆœฌๆŒ‡ไปคๅˆ—่กจ ้ขๅค–่ฏดๆ˜Ž ้…็ฝฎ้กน ๆŽงๅˆถๅฐ ๆ•ฐๆฎๅบ“็ป“ๆž„ To-Do List ๆ’ไปถไพ่ต– ๅฃฐๆ˜Ž ๆœฌๆ’ไปถไป…ไฝœไธบๅญฆไน ไบคๆต็ญ‰ไฝฟ็”จ๏ผŒ่ฏทๅ‹ฟ็”จไบŽ็›ˆๅˆฉ๏ผŒๅฆๅˆ™ๆณ•ๅพ‹ๅŽๆžœ่‡ช่ดŸใ€‚ ๆฌข

Bill Yang 33 Oct 25, 2022
Ghidra Wasm plugin with disassembly and decompilation support

Module to load WebAssembly files into Ghidra, supporting disassembly and decompilation. This plugin borrows loader functionality from this repo: https

Garrett Gu 54 Nov 22, 2022
The best plugin to protect anarchy servers and mc servers in general against op attacks.

AdminSecure The best plugin to protect anarchy servers and mc servers in general against op attacks How does it work? When the server detects a player

PK2_Stimpy 3 Sep 2, 2021
Ghidra Plugin for Texas Instrument CC 8051 SOC's especially CC1110 and CC2510

Texas Instruments CCxxxx Ghidra CPU Plugin Ghidra Plugin for Texas Instrument CC 8051 core SOC's especially CC1110 and CC2510 This helps to name the d

null 6 Dec 22, 2022
QuickShell is an Eclipse plugin to use Java JShell inside the Eclipse IDE.

QuickShell is an Eclipse plugin to use Java JShell (REPL) inside Eclipse IDE. JDK 9+ is not installed on your system? No worries, you can still use Qu

Nilesh Khaire 8 Oct 3, 2022
A BurpSuite plugin for BBRF

bbrf-burp-plugin What's BBRF? The Bug Bounty Reconnaissance Framework (BBRF) is intended to facilitate the workflows of security researchers across mu

Pieter 19 Jun 22, 2022
Flutter plugin to listen to the process text intent stream.

Flutter Process Text Plugin Show some โค๏ธ and โญ the repo Why use Flutter Process Text? Flutter Process Text Plugin is known for : Flutter Process Text

Divyanshu Shekhar 14 Jul 1, 2022
Flutter plugin to listen to the process text intent stream.

Flutter Process Text Plugin Compatibility โœ… Android โŒ iOS (active issue: iOS support) Show some โค๏ธ and โญ the repo Why use Flutter Process Text? Flutte

Devs On Flutter 14 Jul 1, 2022
This simple Android Studio plugin includes keyboard shortcuts for many common actions.

Hotkeys This simple Android Studio plugin includes keyboard shortcuts for many common actions. Features โ€ข Build process โ€ข Contribute โ€ข License Feature

SACHIN KASARADDI 14 Apr 26, 2022
A simple but helpful fight plugin with rank support

RankFight A simple but helpful fight plugin with rank support HighLights PlceholderAPI Support %rankfight_rank% %rankfight_credit% %rankfight_shopCred

่ดบๅ…ฐๆ˜Ÿ่พฐ 5 Nov 20, 2021