Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAR清单主类是相对类还是绝对类?_Java - Fatal编程技术网

Java JAR清单主类是相对类还是绝对类?

Java JAR清单主类是相对类还是绝对类?,java,Java,我很难在JAR清单文档中找到确认信息,但我想知道您的入口点是否包含在“./src/java/main/Program.java”(其中./是项目的根目录)中,例如,您的JAR清单文件看起来像这样吗(文件位于根目录中) 如果是这种情况,那么如果您的清单位于某个子目录(如“./lib”)中,它是否仍然与上面的相同,还是其他内容 编辑:我的问题与使用Ant从某个给定项目构建JAR文件有关,我们需要在命令中指定找到项目入口点的位置。清单文件的路径是固定的,: 创建JAR文件时,它会自动接收默认清单文件。

我很难在JAR清单文档中找到确认信息,但我想知道您的入口点是否包含在“./src/java/main/Program.java”(其中./是项目的根目录)中,例如,您的JAR清单文件看起来像这样吗(文件位于根目录中)

如果是这种情况,那么如果您的清单位于某个子目录(如“./lib”)中,它是否仍然与上面的相同,还是其他内容


编辑:我的问题与使用Ant从某个给定项目构建JAR文件有关,我们需要在命令中指定找到项目入口点的位置。

清单文件的路径是固定的,:

创建JAR文件时,它会自动接收默认清单文件。存档中只能有一个清单文件,并且它始终具有路径名

META-INF/MANIFEST.MF
主类的名称始终需要是完全限定的类名。它不能是无条件的,因为它不是一条路径,所以它不能是“相对的”。但它通常对应于JAR中主类文件的绝对资源路径

注释中提到的一个例外是多版本JAR(清单中指定了
multi-release:true
)。在这种情况下,其他版本的类资源位于JAR文件中的一个版本化子文件夹中,但清单仍然位于相同的固定位置

还要注意,与您的示例不同,完全限定类名不太可能以
src.java.main
开头。相反,它看起来像Java源文件的(乱码)文件夹结构(通常位于
src/main/Java
的子文件夹中)。实际的完全限定类名通常应对应于该路径下的文件夹路径(例如,
com.your company.project.Main
可能对应于文件
src/Main/java/com/your company/project/Main.java
)。它由包的名称加上类的简单名称(用点分隔)给出

例如,在>Test.java < /C> >:

中考虑类<代码>测试<代码>
package me.klmr.project;

class Test { … }

Test
的完全限定类名为
me.klmr.project.Test
,与存储
Test.java
的路径无关(但是相对于项目根目录,常规路径将是
src/main/java/me/klmr/project/Test.java
).

我发现我应该指定我是在使用Ant从我的项目中构建JAR文件(在使用命令时)时询问的。对于这个命令,我们需要让Ant知道在哪里可以找到程序的入口点。在某些情况下(例如多版本jar文件),将要执行的实际类可能不会放在简单的
/foo/Bar.class
空间中,而是放在类似
META-INF/versions/9/foo/Bar.class
的地方,但是清单中给出的名称仍然只是FQCN。@James:入口点总是作为完全限定类名给出。将其映射到某个路径是一项单独的任务。因此,它将始终是(在为我的Ant构建指定的情况下,例如我给出的示例目录)
src.java.main.Program
?@James:这极不可能。你们班的
套餐
声明是什么?当地人叫什么名字?将这些组合起来,您将得到一些.package.Class。它们位于项目中的
src/main/java
就是代码中的组织。该名称仍然不包含这些内容(是的,您可以有一个名为
src.main.java
的包,但这是非常不寻常的,如果您这样做,那么这可能是某个地方的错误配置)。完全限定类名是该类的逻辑名称。如何映射到路径(在jar内部或外部)是一个单独的任务,与此无关。这里提供的不是路径,而是名称。(1)
Main类既不是相对的,也不是绝对的。它根本不是文件名。它是一个完全限定的类名,包括其包。(2) 清单文件本身只能位于JAR文件中的一个位置:
META-INF/Manifest.MF
;它在文件系统中的位置无关紧要。你的问题是基于误解的,我说的是我需要为Ant构建脚本创建的清单文件,以便在创建此类人工制品时通读并理解JAR文件的入口点在哪里。我理解你所说的,一旦创建了JAR文件,清单将存储在唯一可能的目录中,但我已经尝试在编辑我的问题时澄清这不是我所指的。
package me.klmr.project;

class Test { … }