{"id":15893101,"url":"https://github.com/perdian/macosappbundler-maven-plugin","last_synced_at":"2025-04-10T01:12:26.307Z","repository":{"id":35746765,"uuid":"177218404","full_name":"perdian/macosappbundler-maven-plugin","owner":"perdian","description":"Maven plugin for creating a native macOS bundle containing all dependencies required by a Maven project","archived":false,"fork":false,"pushed_at":"2024-10-05T14:58:27.000Z","size":206,"stargazers_count":48,"open_issues_count":2,"forks_count":14,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-10T01:12:20.709Z","etag":null,"topics":["dmg","java","macos-bundle","maven","maven-plugin"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/perdian.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=P94BEUKLPMEFJ"]}},"created_at":"2019-03-22T22:46:40.000Z","updated_at":"2025-02-23T04:36:32.000Z","dependencies_parsed_at":"2023-11-25T14:24:34.542Z","dependency_job_id":"a5c4c05f-38dc-4dea-a158-59e4827d2f6e","html_url":"https://github.com/perdian/macosappbundler-maven-plugin","commit_stats":{"total_commits":159,"total_committers":10,"mean_commits":15.9,"dds":"0.11949685534591192","last_synced_commit":"8ea4257b706acbedd5f8fd22cbcc8707cf54eeae"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perdian%2Fmacosappbundler-maven-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perdian%2Fmacosappbundler-maven-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perdian%2Fmacosappbundler-maven-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perdian%2Fmacosappbundler-maven-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/perdian","download_url":"https://codeload.github.com/perdian/macosappbundler-maven-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137890,"owners_count":21053775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dmg","java","macos-bundle","maven","maven-plugin"],"created_at":"2024-10-06T08:07:30.164Z","updated_at":"2025-04-10T01:12:26.287Z","avatar_url":"https://github.com/perdian.png","language":"Java","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=P94BEUKLPMEFJ"],"categories":[],"sub_categories":[],"readme":"# macOS app bundler Maven plugin\n\nMaven plugin for creating a native [macOS bundle](https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW19) containing all dependencies declared by a Maven project.\n\n[![Maven~~~~ Central](https://img.shields.io/maven-central/v/de.perdian.maven.plugins/macosappbundler-maven-plugin.svg)](https://mvnrepository.com/artifact/de.perdian.maven.plugins/macosappbundler-maven-plugin)\n[![License](http://img.shields.io/:license-apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![Build](https://img.shields.io/circleci/build/github/perdian/macosappbundler-maven-plugin/master)](https://circleci.com/gh/perdian/macosappbundler-maven-plugin)\n\n## Requirements\n\n- Java 9 or newer\n\n## Usage\n\n### Minimum example\n\n```xml\n...\n    \u003cplugin\u003e\n        \u003cgroupId\u003ede.perdian.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emacosappbundler-maven-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e1.21.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n            \u003cplist\u003e\n                \u003cJVMMainClassName\u003ede.perdian.test.YourApplication\u003c/JVMMainClassName\u003e\n            \u003c/plist\u003e\n        \u003c/configuration\u003e\n        \u003cexecutions\u003e\n            \u003cexecution\u003e\n                \u003cphase\u003epackage\u003c/phase\u003e\n                \u003cgoals\u003e\n                    \u003cgoal\u003ebundle\u003c/goal\u003e\n                \u003c/goals\u003e\n            \u003c/execution\u003e\n        \u003c/executions\u003e\n    \u003c/plugin\u003e\n...\n```\n\n### Extended example\n\n```xml\n...\n    \u003cplugin\u003e\n        \u003cgroupId\u003ede.perdian.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emacosappbundler-maven-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e1.21.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n            \u003cplist\u003e\n                \u003cCFBundleIconFile\u003esrc/bundle/test.icns\u003c/CFBundleIconFile\u003e\n                \u003cCFBundleDisplayName\u003eMy supercool application\u003c/CFBundleDisplayName\u003e\n                \u003cCFBundleDevelopmentRegion\u003eEnglish\u003c/CFBundleDevelopmentRegion\u003e\n                \u003cCFBundleURLTypes\u003e\n                    \u003cstring\u003emsa\u003c/string\u003e\n                \u003c/CFBundleURLTypes\u003e\n                \u003cJVMMainClassName\u003ede.perdian.test.YourApplication\u003c/JVMMainClassName\u003e\n                \u003cJVMVersion\u003e11+\u003c/JVMVersion\u003e\n                \u003cJVMOptions\u003e\n                    \u003cstring\u003e-Dfoo=bar\u003c/string\u003e\n                    \u003cstring\u003e-Dx=y\u003c/string\u003e\n                \u003c/JVMOptions\u003e\n                \u003cJVMArguments\u003e\n                    \u003cstring\u003e-example\u003c/string\u003e\n                    \u003cstring\u003e${someProperty}\u003c/string\u003e\n                \u003c/JVMArguments\u003e\n            \u003c/plist\u003e\n            \u003cdmg\u003e\n                \u003cgenerate\u003etrue\u003c/generate\u003e\n                \u003cadditionalResources\u003e\n                    \u003cadditionalResource\u003e\n                        \u003cdirectory\u003esrc/bundle/macos/distribution\u003c/directory\u003e\n                    \u003c/additionalResource\u003e\n                \u003c/additionalResources\u003e\n            \u003c/dmg\u003e\n            \u003ccodesign\u003e\n                \u003cidentity\u003e3rd Party Mac Developer Application: MyName (MyNumber)\u003c/identity\u003e\n            \u003c/codesign\u003e\n        \u003c/configuration\u003e\n        \u003cexecutions\u003e\n            \u003cexecution\u003e\n                \u003cphase\u003epackage\u003c/phase\u003e\n                \u003cgoals\u003e\n                    \u003cgoal\u003ebundle\u003c/goal\u003e\n                \u003c/goals\u003e\n            \u003c/execution\u003e\n        \u003c/executions\u003e\n    \u003c/plugin\u003e\n...\n```\n\n### Example with Java Module Path\n\n```xml\n...\n    \u003cplugin\u003e\n        \u003cgroupId\u003ede.perdian.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emacosappbundler-maven-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e1.21.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n            \u003cplist\u003e\n                \u003cCFBundleIconFile\u003esrc/bundle/test.icns\u003c/CFBundleIconFile\u003e\n                \u003cCFBundleDisplayName\u003eMy supercool application\u003c/CFBundleDisplayName\u003e\n                \u003cCFBundleDevelopmentRegion\u003eEnglish\u003c/CFBundleDevelopmentRegion\u003e\n                \u003cCFBundleURLTypes\u003e\n                    \u003cstring\u003emsa\u003c/string\u003e\n                \u003c/CFBundleURLTypes\u003e\n                \u003cJVMMainModuleName\u003ede.perdian.somemodule/de.perdian.test.YourApplication\u003c/JVMMainModuleName\u003e\n                \u003cJVMVersion\u003e11+\u003c/JVMVersion\u003e\n                \u003cJVMOptions\u003e\n                    \u003cstring\u003e-Dfoo=bar\u003c/string\u003e\n                    \u003cstring\u003e-Dx=y\u003c/string\u003e\n                \u003c/JVMOptions\u003e\n                \u003cJVMArguments\u003e\n                    \u003cstring\u003e-example\u003c/string\u003e\n                    \u003cstring\u003e${someProperty}\u003c/string\u003e\n                \u003c/JVMArguments\u003e\n            \u003c/plist\u003e\n            \u003cdmg\u003e\n                \u003cgenerate\u003etrue\u003c/generate\u003e\n                \u003cadditionalResources\u003e\n                    \u003cadditionalResource\u003e\n                        \u003cdirectory\u003esrc/bundle/macos/distribution\u003c/directory\u003e\n                    \u003c/additionalResource\u003e\n                \u003c/additionalResources\u003e\n            \u003c/dmg\u003e\n        \u003c/configuration\u003e\n        \u003cexecutions\u003e\n            \u003cexecution\u003e\n                \u003cphase\u003epackage\u003c/phase\u003e\n                \u003cgoals\u003e\n                    \u003cgoal\u003ebundle\u003c/goal\u003e\n                \u003c/goals\u003e\n            \u003c/execution\u003e\n        \u003c/executions\u003e\n    \u003c/plugin\u003e\n...\n```\n\n## Features\n\nAfter executing the goal during (e.g. during the `package` phase as shown in the example above) the macOS application bundle will be located in the `PROJECT_NAME.app` directory inside the `target` directory, where `PROJECT_NAME` equals the bundle name entered within the `CFBundleName` setting inside the `plist` configuration, or the name of the Maven project (`${project.name}`) if the value is not present inside the `plist` configuration.\n\nThe plugin will detect whether the project is a Java module by checking if the `plist` property `JVMMainModuleName` is present. If that's the case the launcher will use the *modulepath*. Otherwise the regular *classpath* will be used.\n\n## Configuration\n\n### Property list Configuration\n\nThe values within the `plist` element are directly transferred to the [`Info.plist`](https://developer.apple.com/documentation/bundleresources/information_property_list) file within the application bundle. To keep the usage within the code consistent they use the same keys within the `pom.xml` configuration as they do within the `Info.plist`.\n\nThe following values can be configured:\n\n| Key | Type | Required? | Default | Description |\n| --- | ---- | --------- | ------- | ----------- |\n| `CFBundleDevelopmentRegion` | String | No | `English` | The default language and region for the bundle, as a [language ID](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html). |\n| `CFBundleDisplayName` | String | No | `${project.name}` | The published name of your application. |\n| `CFBundleExecutable` | String | No | `JavaLauncher` | The name of the executable within the application bundle. No regular user will ever see this but you may want to change it for debugging purposes when analyzing your application. |\n| `CFBundleIconFile` | File | No | | The `icns` file that should be used as main icon for the application. The location must be entered relatively to the root of the project in which the plugin is used. |\n| `CFBundleIdentifier` | String | No | `${groupId}.${artifactId}` | The [macOS bundle identifier](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleidentifier) of your application. |\n| `CFBundleName` | String | No | `${project.name}` | The internal name of your application. |\n| `CFBundlePackageType` | String | No | `APPL` | A four-letter code specifying the bundle type. For apps, the code is `APPL`, for frameworks, it' `FMWK`, and for bundles, it's `BNDL` ([Details](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundlepackagetype)) |\n| `CFBundleShortVersionString` | String | No | `${version}` | The version of your application. |\n| `CFBundleDocumentTypes` | Array of CFBundleDocumentTypes | No |  | Additional information for document types (see [details](#CFBundleDocumentTypes-configuration-example) for an extended example). |\n| `CFBundleURLTypes` | Array of Strings | No | | A list of URL schemes (`http`, `ftp`, etc.) supported by the application. |\n| `JVMArguments` | Array of Strings | No | | Additional arguments to be passed to the Java runtime. |\n| `JVMLogLevel` | String | No | `INFO` | The amount of details the launcher will print to the console if called directly from the command line. Possible values: `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`. |\n| `JVMMainClassName` | String | Yes (if the application is a classic classpath based application) | | The main class whose `main` method should be invoked when starting your application. |\n| `JVMMainModuleName` | String | Yes (if the application is a module based application) | | The main module that should be invoked when starting your application. |\n| `JVMOptions` | Array of Strings | No | | Additional parameters (`-D` parameters) to be passed to the Java runtime. |\n| `JVMRuntimePath` | String | No | | The exact location of the Java runtime. |\n| `JVMVersion` | String | No | | The Java version your application needs to work. Can either be an explicit version String like `11.0.1`, a major version like `11` (signalizing that *any* Java 11 runtime is sufficient) or a value like `11+` (signalizing that *any* Java 11 *or higher* runtime is sufficient). |\n| `LSUIElement` | Boolean | No | | Declares if the application is an agent app that runs in the background and doesn't appear in the Dock ([Details](https://developer.apple.com/documentation/bundleresources/information_property_list/lsuielement)). |\n| `NSAppleMusicUsageDescription` | String | No | | A message that tells the user why the app is requesting access to the user’s media library. |\n| `NSAppSleepDisabled` | Boolean | No | | Declares if the app is allowed to nap or not. |\n| `NSCameraUsageDescription` | String | No | | A message that tells the user why the app is requesting access to the device's camera ([Details](https://developer.apple.com/documentation/bundleresources/information_property_list/nscamerausagedescription)). |\n| `NSHighResolutionCapable` | Boolean | No | `true` | Declares if the application supports rendering in HiDPI (Retina) ([Details](https://developer.apple.com/documentation/bundleresources/information_property_list/nshighresolutioncapable)). |\n| `NSHumanReadableCopyright` | String | No | | A human-readable copyright notice for the bundle ([Details](https://developer.apple.com/documentation/bundleresources/information_property_list/nshumanreadablecopyright/)). |\n| `NSMicrophoneUsageDescription` | String | No | | A message that tells the user why the application is requesting access to the device's microphone ([Details](https://developer.apple.com/documentation/bundleresources/information_property_list/nsmicrophoneusagedescription)). |\n| `NSSupportsAutomatic` `GraphicsSwitching` | Boolean | No | `true` | Declares whether an OpenGL app may utilize the integrated GPU ([Details](https://developer.apple.com/documentation/bundleresources/information_property_list/nssupportsautomaticgraphicsswitching)). |\n\n### CFBundleDocumentTypes configuration example\n\n```xml\n    \u003cconfiguration\u003e\n        \u003cplist\u003e\n            ...\n            \u003cCFBundleDocumentTypes\u003e\n                \u003cCFBundleDocumentTypes\u003e\n                    \u003cCFBundleTypeName\u003eMyDocumentType\u003c/CFBundleTypeName\u003e\n                    \u003cCFBundleTypeRole\u003eEditor\u003c/CFBundleTypeRole\u003e\n                    \u003cCFBundleTypeExtensions\u003e\n                        \u003cstring\u003efoo\u003c/string\u003e\n                        \u003cstring\u003efoobar\u003c/string\u003e\n                    \u003c/CFBundleTypeExtensions\u003e\n                \u003c/CFBundleDocumentTypes\u003e\n                \u003cCFBundleDocumentTypes\u003e\n                    \u003cCFBundleTypeName\u003eAnotherDocumentType\u003c/CFBundleTypeName\u003e\n                    \u003cCFBundleTypeRole\u003eEditor\u003c/CFBundleTypeRole\u003e\n                    \u003cCFBundleTypeExtensions\u003e\n                        \u003cstring\u003ex\u003c/string\u003e\n                        \u003cstring\u003ey\u003c/string\u003e\n                    \u003c/CFBundleTypeExtensions\u003e\n                \u003c/CFBundleDocumentTypes\u003e\n            \u003c/CFBundleDocumentTypes\u003e\n            ...\n        \u003c/plist\u003e\n    \u003c/configuration\u003e\n```\n\n*Yes, the `CFBundleDocumentTypes` has to be entered twice: First as the parent for additional configurations and then for each configuration you want to define.*\n\n### DMG configuration\n\nThe following other properties can be added to the `dmg` element configuring the generation of the [DMG file](https://www.howtogeek.com/362166/what-is-a-dmg-file-and-how-do-i-use-one/) at the end of the build:\n\n| Key | Type | Required? | Default | Description |\n| --- | ---- | --------- | ------- | ----------- |\n| `generate` | Boolean | No | `false` | Whether or not to create a `DMG` archive. |\n| `additionalResources` | List\u0026lt;Fileset\u0026gt; | No | | List of additional files to be copied into the archive. |\n| `createApplicationsSymlink` | Boolean | No | `true` | Whether or not to include a link to the Applications folder inside the archive. |\n| `useGenIsoImage` | Boolean | No | `false` | Whether or not to use `genisoimage` to create the archive. Default is `hdiutil`. |\n| `autoFallback` | Boolean | No | `false` | If `true`, try the other archive generation method when the first one fails. (e.g. run `hdiutil` when `genisoimage` fails and vice-versa) |\n| `appendVersion` | Boolean | No | `true` | If `true`, append the version to the `.dmg` name |\n| `dmgFileName` | String | No | `null` | If not `null` and not empty, the supplied string will be used as the file name (`.dmg` will be appended). |\n\n### APP configuration\n\nThe following other properties can be added to the `app` element configuring additional files to be included in the app bundle:\n\n| Key | Type | Required? | Default | Description |\n| --- | ---- | --------- | ------- | ----------- |\n| `additionalResources` | List\u0026lt;Fileset\u0026gt; | No | | Additional files to be copied into the app bundle. |\n\n```xml\n...\n    \u003cconfiguration\u003e\n        \u003capp\u003e\n            \u003cadditionalResources\u003e\n                \u003cresource\u003e\n                    \u003cdirectory\u003e${project.basedir}/src/main/resources\u003c/directory\u003e\n                    \u003coutputDirectory\u003eContents/Resources\u003c/outputDirectory\u003e\n                    \u003cincludes\u003e\n                        \u003cinclude\u003e**\u003c/include\u003e\n                    \u003c/includes\u003e\n                \u003c/resource\u003e\n            \u003c/additionalResources\u003e\n        \u003c/app\u003e\n    \u003c/configuration\u003e\n...\n```\n\n### Code signing\n\nThe plugin can automatically sign the created application bundle if a codesign identiy is given:\n\n```\n...\n    \u003cconfiguration\u003e\n        \u003ccodesign\u003e\n            \u003cidentity\u003e3rd Party Mac Developer Application: MyName (MyNumber)\u003c/identity\u003e\n        \u003c/codesign\u003e\n    \u003c/configuration\u003e\n...\n```\n\nThe following other properties can be added to the `codesign` element configuring additional options for signing:\n\n| Key | Type | Required? | Default | Description |\n| --- | ---- | --------- | ------- | ----------- |\n| `enable` | Boolean | No | `true` | Whether or not to sign the created application bundle. |\n| `identity` | String | Yes | | The identity of the signer. Required if the `codesign` element is present. |\n| `preserveMetadata` | List\u0026lt;String\u0026gt; | No | `entitlements` | |\n\nTo sign the application using a local dummy identity (which will only work on the machine where the signing was performed) you can use:\n\n```\n...\n    \u003cconfiguration\u003e\n        \u003ccodesign\u003e\n            \u003cidentity\u003e-\u003c/identity\u003e\n        \u003c/codesign\u003e\n    \u003c/configuration\u003e\n...\n```\n\n### JDK inclusion\n\nUsually the application bundle built by the plugin will depend upon a Java runtime being available on the machine where the application is executed. To be completely self-sustaining, the plugin supports including the runtime into the target application. That runtime will then be used to launch the application, so there are no dependencies to a JDK being installed locally.\n\n```xml\n...\n    \u003cconfiguration\u003e\n        \u003cjdk\u003e\n            \u003cinclude\u003etrue\u003c/include\u003e\n            \u003clocation\u003e/where/your/jdk/is/installed\u003c/location\u003e\n        \u003c/jdk\u003e\n    \u003c/configuration\u003e\n...\n```\n\nThe following parameters can be set below the `jdk` configuration element:\n\n| Key | Type | Required? | Default | Description |\n| --- | ---- | --------- | ------- | ----------- |\n| `include` | Boolean | No | `false` | Whether or not to include the JDK in the generated application bundle. |\n| `location` | String | No | | The location of the JDK to be included. If no location is provided then the *currently used JDK* (which is the JDK that is used by the Maven binary) will be added to the application. |\n\n### Dependencies exclusion\n\nBy default all declared dependencies (both direct dependencies as well as transient dependencies) are included in the generated application bundle.\n\nIf you only want to include the direct application JAR file without any dependencies (e.g. because you've already included the dependencies into the application JAR itself) then you can set the `includeDependencies` flag of the `app` configuration to `false`:\n\n```xml\n...\n    \u003cconfiguration\u003e\n        \u003capp\u003e\n            \u003cincludeDependencies\u003efalse\u003c/includeDependencies\u003e\n        \u003c/app\u003e\n    \u003c/configuration\u003e\n...\n```\n\n### Native binary selection\n\nBy default the launcher contains a [universal binary](https://en.wikipedia.org/wiki/Universal_binary#Universal_2) that allows running the application on both the classic x86_64 as well as the new arm64 architecture.\n\nIn case any problems occur with the universal binary (or if you want to support only a specific architecture) you can select which binary should be bundled with your application via the `nativeBinary` setting:\n\n```xml\n ...\n    \u003cconfiguration\u003e\n        \u003cnativeBinary\u003eX86_64\u003c/nativeBinary\u003e\n    \u003c/configuration\u003e\n ...\n```\n\nThe available values are:\n- `UNIVERSAL` (the default if no explicit value is given)\n- `X86_64`\n- `ARM_64`\n\n## Development\n\nChanges are documented in the [`CHANGELOG.md`](CHANGELOG.md) file.\n\nThe project consists of two main parts: The regular *Maven plugin* (written in Java) and the *native macOS launcher* (written in Objective C).\n\nBuilding the native part is fully integrated into the Maven lifecycle, so all you need to do to build the plugin is:\n\n    $ git clone https://github.com/perdian/macosappbundler-maven-plugin.git\n    $ mvn clean install\n\n*I am aware that my understanding of Objective C is very basic - I'm not an Objective C developer by heart and going back to using pointers and (somewhat) manual memory management feels pretty strange. So a lot of what's in the code is highly cargo culted from tutorials and answers on Stackoverflow, but hey: It works!*\n\n## Authors\n\n- [**Christian Seifert**](http://www.perdian.de)\n\n[![Donate](https://www.paypalobjects.com/en_US/DK/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=P94BEUKLPMEFJ)\n\nSee also the [list of contributors](https://github.com/perdian/macosappbundler-maven-plugin/contributors) who participated in this project.\n\n## License\n\nThis project is licensed under the Apache 2.0 License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\nI originally used and have been highly influenced by the [`appbundle-maven-plugin`](https://github.com/federkasten/appbundle-maven-plugin) from [`federkasten`](https://github.com/federkasten). Unfortunately the plugin stopped working with Java versions 10 and above (and didn't provide support for Java 9+ module projects).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperdian%2Fmacosappbundler-maven-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fperdian%2Fmacosappbundler-maven-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperdian%2Fmacosappbundler-maven-plugin/lists"}