我想将版本信息(以及可能的一些关于jar的其他元数据)添加到我创建的一个库的jar中.但是,我不知道要使用什么属性.我发现
specification以及
documentation解释说可以有一个Specification-Version和Implementation-Version(以及两者的标题和供应商).但是既不能正确解释规范与实现之间的区别.
我也看了不同的例子.
> documentation中的一个使用了“可执行标题”的“可读名称”和“实施标题”的包名称.规范版本使用点分隔版本号,而实现版本使用简单版本号.
>毕业论文教程似乎只是使用了实现版本和一个人性化的字符串来实现标题
>在another question,我发现一个例子,有不同的包的几个实现版本.
这里的规范和实现元数据之间有什么区别?应该如何使用这些不同的属性(特别是版本号)?规范和实施的供应商是不同的吗?
它甚至发挥了我在那里的作用吗?
解决方法
每个的含义在
documentation of java.lang.Package中解释.
Specification-Version必须由ASCII数字序列组成,以ASCII周期分隔.不允许其他字符,期间不能在值的开始或结尾,并且不允许连续的期间.
Implementation-Version是一个自由格式的字符串.它可以有任何格式.
规格 – 版本始终与包关联.如果您为整个清单指定,而不是针对特定的软件包,则它将应用于.jar文件中的所有软件包.
规范版本被许多Java技术用作解决依赖关系的一种手段.如果一些程序说需要JMF库的2.1版或更高版本,一些Java环境将分析每个清单的Specification-Version中的数字,并具有匹配的Specification-Title,并确保正确的版本(和没有其他版本)在运行时在类路径中可用.
事实上,Package.isCompatibleWith方法确实是非常检查.您甚至可以使用它来检查最低Java版本:
@H_301_26@if (System.class.getPackage().isCompatibleWith("1.6")) { System.out.println("Running in Java 1.6 or later."); }