如何在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
相关产品推荐
相关产品推荐

