Spring Boot应用jpackage打包dmg后,Mac任务栏菜单显示JarLauncher问题
解决MacOS下jpackage生成的DMG右键菜单显示JarLauncher的问题
问题原因
Spring Boot默认使用JarLauncher作为可执行JAR的主类,jpackage打包时会默认沿用这个类名作为MacOS应用的内部标识,导致右键菜单显示"About JarLauncher"和"Quit JarLauncher"。
解决思路
1. 替换自定义启动类
创建一个自定义启动类,代理调用Spring Boot的JarLauncher,让jpackage识别自定义类名:
public class MyAppLauncher { public static void main(String[] args) { org.springframework.boot.loader.JarLauncher.main(args); } }
修改打包配置,指定这个类为主类:
- Maven(pom.xml):
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.example.MyAppLauncher</mainClass> </configuration> </plugin> </plugins> </build>
- Gradle(build.gradle):
springBoot { mainClass.set("com.example.MyAppLauncher") }
重新打包生成JAR后,jpackage会使用自定义启动类名作为标识。
2. 用jpackage的Mac专属参数指定应用名称
在jpackage命令中添加--mac-package-name参数,直接设置MacOS应用包的内部名称:
jpackage --input target/ --name "My App" --main-jar myapp.jar --type dmg --icon icn.icns --mac-package-name "My App"
这个参数会覆盖默认的主类名标识,让右键菜单显示自定义的应用名称。
3. 自定义Info.plist配置文件
创建MacOS应用的Info.plist模板,配置应用元数据:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleName</key> <string>My App</string> <key>CFBundleDisplayName</key> <string>My App</string> <key>CFBundleIdentifier</key> <string>com.example.myapp</string> <key>CFBundleVersion</key> <string>1.0.0</string> </dict> </plist>
将该文件放在指定目录(比如./resources),然后修改jpackage命令:
jpackage --input target/ --name "My App" --main-jar myapp.jar --type dmg --icon icn.icns --resource-dir ./resources
jpackage会使用这个配置文件生成应用包,确保右键菜单显示正确的应用名称。
内容的提问来源于stack exchange,提问作者Lorenz
相关产品推荐
相关产品推荐

