You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Gradle项目生成Mac安装包?解决模块名未找到错误

解决Mac安装包创建及模块名问题

一、获取模块名的两种情况

1. 模块化项目(有module-info.java)

如果你的项目是模块化结构,在src/main/java目录下会存在module-info.java文件,文件第一行module 模块名 {}中的内容就是你需要的模块名。示例:

module com.example.myapp {
    requires java.desktop;
    exports com.example.myapp;
}

这里的com.example.myapp就是模块名。

2. 非模块化项目(无module-info.java)

如果项目没有module-info.java,说明这是普通Java项目,不存在模块名,此时无需使用jlink的--add-modules参数,需要调整安装包创建逻辑。

二、正确创建Mac安装包的Gradle任务配置

方案1:非模块化项目(适合新手,推荐)

直接让jpackage自动生成运行时镜像,无需手动调用jlink,修改你的createInstaller任务如下:

task createInstaller(type: Exec) {
    // 确保先完成项目构建
    dependsOn 'build'

    doFirst {
        // 用jpackage直接创建pkg安装包
        exec {
            commandLine 'jpackage',
                '--type', 'pkg',
                '--input', 'build/libs', // jar包所在目录
                '--dest', 'build/installer', // 安装包输出目录
                '--name', 'YourAppName', // 应用名称
                '--main-jar', 'yourapp.jar', // 替换为你的实际jar文件名(比如xxx-1.0.jar)
                '--main-class', 'your.main.Class', // 替换为你的主类全限定名(比如com.example.Main)
                '--verbose' // 开启日志,方便排查问题
        }
    }
}

方案2:模块化项目

若要保留模块化结构,先确保module-info.java配置正确,再调整jlink的模块路径,确保包含你的模块和所有依赖模块:

task createInstaller(type: Exec) {
    dependsOn 'build'

    doFirst {
        // 生成自定义运行时镜像
        exec {
            commandLine 'jlink',
                '--module-path', "build/libs:${configurations.runtimeClasspath.asPath}", // 包含你的模块jar和所有依赖
                '--add-modules', 'com.example.myapp', // 替换为你的实际模块名
                '--output', 'app-image',
                '--compress', '2',
                '--no-header-files',
                '--no-man-pages'
        }

        // 创建pkg安装包
        exec {
            commandLine 'jpackage',
                '--type', 'pkg',
                '--input', 'build/libs',
                '--dest', 'build/installer',
                '--name', 'YourAppName',
                '--main-jar', 'yourapp.jar',
                '--main-class', 'your.main.Class',
                '--runtime-image', 'app-image'
        }
    }
}

三、额外注意事项

  1. Jar包配置优化:在build.gradle中配置Jar任务的主类,这样可以不用在jpackage中重复指定--main-class:
jar {
    manifest {
        attributes 'Main-Class': 'your.main.Class' // 替换为你的主类
    }
}
  1. Java版本要求:确保使用Java 11及以上版本(推荐Java 17),jpackage在这些版本中支持更完善。
  2. Mac权限问题:运行jpackage创建pkg可能需要管理员权限,若执行任务时报权限错误,可以用sudo ./gradlew createInstaller运行。
  3. 依赖处理:如果项目有第三方依赖,确保configurations.runtimeClasspath能正确获取所有依赖,避免出现依赖缺失问题。

内容的提问来源于stack exchange,提问作者Dolev Dublon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:28:13