{"id":22515304,"url":"https://github.com/scijava/app-launcher","last_synced_at":"2025-03-28T02:19:22.658Z","repository":{"id":258791609,"uuid":"870983894","full_name":"scijava/app-launcher","owner":"scijava","description":"UNRELEASED PROTOTYPE","archived":false,"fork":false,"pushed_at":"2025-01-14T20:26:26.000Z","size":135,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-02-02T03:41:20.495Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scijava.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2024-10-11T03:20:55.000Z","updated_at":"2025-01-14T20:26:30.000Z","dependencies_parsed_at":"2025-01-14T21:25:26.811Z","dependency_job_id":"b95723f0-f901-4f29-b4dd-c2e75271db5c","html_url":"https://github.com/scijava/app-launcher","commit_stats":null,"previous_names":["scijava/app-launcher"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scijava%2Fapp-launcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scijava%2Fapp-launcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scijava%2Fapp-launcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scijava%2Fapp-launcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scijava","download_url":"https://codeload.github.com/scijava/app-launcher/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245955328,"owners_count":20699891,"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":[],"created_at":"2024-12-07T03:29:35.699Z","updated_at":"2025-03-28T02:19:22.396Z","avatar_url":"https://github.com/scijava.png","language":"Java","readme":"[![](https://img.shields.io/maven-central/v/org.scijava/app-launcher.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.scijava%22%20AND%20a%3A%22app-launcher%22)\n[![](https://github.com/scijava/app-launcher/actions/workflows/build.yml/badge.svg)](https://github.com/scijava/app-launcher/actions/workflows/build.yml)\n\nThe SciJava app-launcher provides an entry point into SciJava applications,\nnotably [Fiji](https://fiji.sc/). Its design synergizes well with the\n[Jaunch](https://github.com/apposed/jaunch) native launcher, although\nJaunch is by no means the only solution for the native executable side;\n[`jpackage`](https://docs.oracle.com/en/java/javase/21/docs/specs/man/jpackage.html)\nor [jDeploy](https://www.jdeploy.com/) should also work for example.\n\nThe app-launcher's most major functions are:\n\n* Ensure the version of Java being used is appropriate to app's requirements.\n  In case it isn't, offer to upgrade Java by downloading a more appropriate version.\n\n* Load classes dynamically, without relying on the system classpath.\n\n* Display a splash window while the application is starting up.\n\n## Supported configuration\n\nThe app-launcher uses system properties to configure its behavior:\n\n* `scijava.app.name`: Name of the application being launched.\n  Used in message dialogs if/when interacting with the user.\n\n* `scijava.app.splash-image`: Resource path to an image for the splash window,\n  to be loaded using `ClassLoader#getResource`. It can be either its own file\n  or stored within a JAR file, as long as the resource is on the classpath.\n\n* `scijava.app.look-and-feel`: Fully qualified class name of a Swing\n  `LookAndFeel` to be set before any UI components are created or shown.\n  This can be useful to ensure a consistent appearance between the app-launcher\n  splash and dialog UI with any later application UI, as well as to improve UI\n  behavior on HiDPI displays using smarter Look \u0026 Feels such as\n  [FlatLaf](https://www.formdev.com/flatlaf/).\n\n* `scijava.app.java-root`: directory containing \"bundled\" installations of Java.\n  The `Java.root()` method reports this value if it points to a valid directory.\n  The `Java.check()` method will look here (via `Java.root()`) for which JVMs\n  are already present locally, and also unpack any newly downloaded JVM into\n  this directory.\n\n* `scijava.app.java-links`: URL of a plain text file containing links to\n  desirable Java bundles. The format is `\u003cplatform\u003e=\u003curl\u003e` for each platform\n  (OS+architecture) of Java that you want to support. For example:\n  ```\n  linux-arm64=https://cdn.azul.com/zulu/bin/zulu21.36.17-ca-jdk21.0.4-linux_aarch64.tar.gz\n  linux-x64=https://cdn.azul.com/zulu/bin/zulu21.36.17-ca-jdk21.0.4-linux_x64.tar.gz\n  macos-arm64=https://cdn.azul.com/zulu/bin/zulu21.36.17-ca-jdk21.0.4-macosx_aarch64.tar.gz\n  macos-x64=https://cdn.azul.com/zulu/bin/zulu21.36.17-ca-jdk21.0.4-macosx_x64.tar.gz\n  windows-arm64=https://cdn.azul.com/zulu/bin/zulu21.36.17-ca-jdk21.0.4-win_aarch64.zip\n  windows-x64=https://cdn.azul.com/zulu/bin/zulu21.36.17-ca-jdk21.0.4-win_x64.zip\n  ```\n  The exact naming is up to you, but for a Java distribution to be downloaded,\n  the `scijava.app.platform` property must be set and match one of the keys\n  indicated within the fetched remote resource.\n\n* `scijava.app.java-version-minimum`:  The minimum version of Java required by\n  the application. It can be a standalone number like 11, in which case it is\n  treated as a major version, or a dot-separated sequence of digits, which case\n  version comparisons are done digit by digit (see `Versions.compare`).\n  This value is used by `Java.check()` (via `Java.minimumVersion()`) to\n  warn the user accordingly if the running Java version is not good enough.\n\n* `scijava.app.java-version-recommended`: The minimum version of Java the\n  application would *prefer* to use. Same syntax as `java-version-minimum`.\n  This value is used by `Java.check()` (via `Java.recommendedVersion()`) to\n  warn the user accordingly if the running Java version is not ideal.\n\n## Provenance\n\nThe SciJava app-launcher evolved from the\n[ImageJ Launcher](https://github.com/imagej/imagej-launcher),\nwhich was a prior solution for launching [Fiji](https://fiji.sc/).\n\nThe imagej-launcher's `ClassLauncher` supported a couple of\nFiji/ImageJ-specific flags that this SciJava app-launcher does not:\n\n**`-ijjarpath \u003cpath\u003e`:** This flag provided automatic loading of plugins in\n`$HOME/.plugins` as well as from the value(s) of the `ij1.plugin.dirs` system\nproperty, when `\u003cpath\u003e` was set to `plugins`. To accomplish an equivalent thing\nwith the app-launcher, use something like:\n```shell\n-jarpath plugins:\"$HOME\"/.plugins:/path1:/path2:/path3\n```\nrather than:\n```shell\n-Dij1.plugin.dirs=/path1:/path2:/path3 -jarpath plugins\n```\n\nThis works because the `org.scijava.launcher.ClassLauncher`'s `-jarpath`\nhandling splits on colons/semicolons.\n\n**`-ijcp \u003cpath1:path2:...\u003e`:** This was an undocumented feature, not used by\nnormal Fiji/ImageJ launches. You can accomplish something similar using\n`-cp \u003cpath1:path2:...\u003e` instead.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscijava%2Fapp-launcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscijava%2Fapp-launcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscijava%2Fapp-launcher/lists"}