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

如何通过javafx-maven-plugin将Java可执行文件放入指定目录?

当然可以实现!咱们可以通过调整javafx-maven-plugin的配置,再配合一点Maven的资源复制操作,就能把Java可执行文件放到Java.runtime/Contents/Home/bin目录里。下面分两种场景给你具体方案:

场景1:让JLink直接在Runtime的bin目录生成你的应用可执行文件

如果你的应用是模块化的,你可以借助JLink的launcher参数,让它在生成的Runtime的bin目录下直接创建一个启动你应用的可执行文件。这是最直接的方式,不需要额外复制文件。

调整你的javafx-maven-plugin配置如下:

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.8</version>
    <configuration>
        <!-- 指定你的主类全路径 -->
        <mainClass>com.yourpackage.YourMainClass</mainClass>
        <!-- JLink配置:生成自定义启动器到Runtime的bin目录 -->
        <jlink>
            <!-- 格式:[启动器名称]=[模块名]/[主类全路径] -->
            <launcher>myapp=com.yourmodule/com.yourpackage.YourMainClass</launcher>
            <addModules>
                <addModule>jdk.jshell</addModule>
                <addModule>com.yourmodule</addModule>
            </addModules>
        </jlink>
        <!-- 保留你原有的Bundle配置 -->
        <bundleArguments>
            <icon.icns>src/main/resources/icns/icon.icns</icon.icns>
        </bundleArguments>
    </configuration>
    <executions>
        <execution>
            <id>default-cli</id>
            <phase>package</phase>
            <goals>
                <goal>jlink</goal>
                <goal>jpackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

当你执行mvn package的时候,JLink会生成包含jdk.jshell和你应用模块的Runtime,并且在Java.runtime/Contents/Home/bin目录下生成名为myapp的可执行文件——直接运行它就能启动你的应用。

场景2:复制外部已有的Java可执行文件到目标目录

如果你的可执行文件是外部生成的,不是JLink直接生成的,那可以用maven-resources-plugin在打包阶段把它复制到JLink生成的Runtime目录里,之后JPackage会自动把这个目录打包到Java.runtime/Contents/Home/bin中。

先添加maven-resources-plugin的配置:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.1</version>
    <executions>
        <execution>
            <id>copy-executable-to-runtime</id>
            <!-- 在JLink生成镜像之后、JPackage打包之前执行复制 -->
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <!-- JLink生成的镜像目录,默认是这个路径 -->
                <outputDirectory>${project.build.directory}/jlink/image/bin</outputDirectory>
                <resources>
                    <resource>
                        <!-- 你的可执行文件所在的目录 -->
                        <directory>src/main/resources/executables</directory>
                        <!-- 要复制的可执行文件名 -->
                        <includes>
                            <include>your-custom-executable</include>
                        </includes>
                        <filtering>false</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

然后保留你原有的javafx-maven-plugin配置(包括bundleArguments里的add-modules和图标设置)就行。执行mvn package时,这个插件会自动把指定的可执行文件复制到Runtime的bin目录,最终打包进你的app bundle里。

小提醒

按照macOS的App Bundle规范,应用的主启动器通常放在Contents/MacOS目录下,但技术上我们完全可以把可执行文件放到Java.runtime/Contents/Home/bin里——如果你有特殊需求的话,上面的方案都能满足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:40:13