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

如何通过Launch4j Maven插件限制Java应用为单实例运行

Launch4j配置单实例运行方案

Launch4j本身就支持配置单实例运行,无需额外编写Java代码,通过Maven插件的配置即可实现。

核心配置项

在Launch4j Maven插件的<configuration>节点下,添加<singleInstance>标签块,通过以下子配置项控制单实例行为:

配置示例

<plugin>
    <groupId>com.akathist.maven.plugins.launch4j</groupId>
    <artifactId>launch4j-maven-plugin</artifactId>
    <version>2.2.0</version>
    <executions>
        <execution>
            <id>package-as-exe</id>
            <phase>package</phase>
            <goals>
                <goal>launch4j</goal>
            </goals>
            <configuration>
                <headerType>gui</headerType> <!-- 控制台程序填console -->
                <outfile>target/YourApp.exe</outfile>
                <jar>target/your-app.jar</jar>
                
                <!-- 单实例核心配置 -->
                <singleInstance>
                    <!-- 唯一系统互斥体名称,必须全局唯一 -->
                    <mutexName>com.yourcompany.yourapp.instance.lock</mutexName>
                    <!-- GUI程序可选:通过窗口标题检测已有实例 -->
                    <windowTitle>你的应用窗口标题</windowTitle>
                    <!-- 激活已有实例窗口(GUI程序生效) -->
                    <activateOnFirstInstance>true</activateOnFirstInstance>
                </singleInstance>

                <!-- 其他JVM配置 -->
                <jre>
                    <minVersion>1.8.0</minVersion>
                </jre>
            </configuration>
        </execution>
    </executions>
</plugin>

配置项说明

  • <mutexName>:系统级互斥体的唯一标识,建议采用反向域名格式(如com.yourcompany.appname),确保不会与其他程序的互斥体冲突。Launch4j会通过这个互斥体判断是否已有实例在运行。
  • <windowTitle>:仅对GUI程序生效,当检测到同名窗口时,会激活已有窗口而非启动新实例。
  • <activateOnFirstInstance>:设置为true时,若检测到已有实例,会自动将其窗口前置显示,优化用户体验。

额外建议

  1. 互斥体唯一性:务必保证<mutexName>的唯一性,否则可能导致其他程序或自身不同版本的实例无法正常启动。
  2. 控制台程序适配:如果是控制台应用,只需配置<mutexName>即可,<windowTitle>和<activateOnFirstInstance>不生效。
  3. 复杂场景处理:如果需要将新启动的命令行参数传递给已有实例,仅靠Launch4j的配置无法实现,这时可以在Java代码中结合Socket监听、文件锁等方式实现自定义单实例逻辑,与Launch4j的配置配合使用。
  4. 测试注意事项:测试时请确保完全关闭所有应用实例后再重新启动,避免残留的互斥体导致误判(正常退出时Launch4j会自动释放互斥体)。

内容的提问来源于stack exchange,提问作者Gokul C T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:45:36