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

如何在Maven的pom.xml中用变量替代Uber Jar硬编码文件名?

当然可以!Maven本身提供了内置的属性和占位符来避免硬编码,这样你的配置会更灵活,版本升级时也不用手动修改这个路径。下面是具体的实现方案:

1. 使用Maven内置的${project.build.finalName}属性

这个属性对应项目构建后生成的Jar文件的基础名称(不带.jar后缀),默认值是${project.artifactId}-${project.version}——刚好匹配你现在的app-1.0.0-SNAPSHOT(假设你的项目artifactId是app)。

2. 修改launch4j-maven-plugin的配置

直接把硬编码的Jar路径替换成这个变量即可,修改后的配置示例如下:

<plugin>
    <groupId>com.akathist.maven.plugins.launch4j</groupId>
    <artifactId>launch4j-maven-plugin</artifactId>
    <!-- 记得替换成你正在使用的插件版本 -->
    <version>2.4.1</version>
    <executions>
        <execution>
            <id>package-as-exe</id>
            <phase>package</phase>
            <goals>
                <goal>launch4j</goal>
            </goals>
            <configuration>
                <!-- 用Maven内置变量替代硬编码的文件名 -->
                <jar>target/${project.build.finalName}.jar</jar>
                <!-- 你的其他launch4j配置(比如图标、控制台设置等) -->
            </configuration>
        </execution>
    </executions>
</plugin>

3. (可选)自定义finalName(如果需要更灵活的命名)

如果项目默认的finalName不符合你的需求,可以在pom.xml的<build>节点下显式指定名称规则,比如:

<build>
    <!-- 自定义最终生成的Jar名称格式 -->
    <finalName>app-${project.version}</finalName>
    <!-- 其他插件配置(比如maven-shade-plugin) -->
</build>

这样不管你的artifactId是什么,生成的Jar都会是app-版本号.jar,launch4j-maven-plugin的配置也能自动匹配。

4. 验证配置

执行mvn package命令,Maven会自动将${project.build.finalName}替换为实际的Jar名称,launch4j-maven-plugin就能正确找到你用maven-shade-plugin生成的Uber Jar,并打包成exe文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:38:51