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

JAR Manifest中Main-Class属性是相对路径还是绝对路径?

问题1:Main-Class的配置值是否为src.java.main.Program?

不是,这个配置是错误的。

  • Main-Class属性的取值规则是入口类的全限定名(包名+类名),和源文件的磁盘路径、源码根目录的外层路径没有任何关系。
  • 以你给出的源文件路径./src/java/main/Program.java为例:通常src/java/main是Java项目的源码根目录(即Ant构建时javac任务指定的srcdir根路径),如果你的Program.java没有声明package包,那它的全限定名就是Program,对应的Main-Class应该配置为Main-Class: Program;如果Program.java开头声明了package main.java;,全限定名才是main.java.Program,但绝对不会包含src这个源码外层目录。
  • 补充验证规则:你编译后找到Program.class文件,从class文件所在的目录结构往上数,去掉编译输出根目录后的路径就是包名,比如编译输出到build/classes,Program.class路径是build/classes/com/xxx/Program.class,那全限定名就是com.xxx.Program。

问题2:Manifest文件的存放位置是否会影响Main-Class的配置?

不需要调整,和根目录下的配置完全一致。

  • Manifest文件在你本地项目中的存放路径(不管是根目录还是./lib子目录),只是Ant构建时读取Manifest文件的本地路径,和JAR包内的规则无关。只要构建时Ant能正确读取到这个Manifest文件,并且将其打包到JAR的META-INF/MANIFEST.MF位置,里面的Main-Class配置就只和类的全限定名有关,和Manifest本地存放位置没有关联。

Ant构建场景补充说明

你在Ant的<jar>任务中指定Manifest路径时,只需要填对本地项目中Manifest文件的相对路径即可,不需要修改Manifest内部的Main-Class配置:

<jar destfile="build/app.jar" manifest="./lib/MANIFEST.MF">
    <!-- 其他配置,比如指定编译后的class文件路径 -->
    <fileset dir="build/classes"/>
</jar>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 17:45:05