如何创建清单。当您在生产环境中测试和运行罐子时可以使用的MF?
2022-09-02 04:34:04
我花了太多时间试图弄清楚这一点。这应该是最简单的事情,每个在jar中分发Java应用程序的人都必须处理它。
我只想知道将版本控制添加到我的Java应用程序的正确方法,以便我可以在测试时访问版本信息,例如在Eclipse中调试并从jar运行。
以下是我在构建中的内容.xml:
<target name="jar" depends = "compile">
<property name="version.num" value="1.0.0"/>
<buildnumber file="build.num"/>
<tstamp>
<format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<manifest file="${build}/META-INF/MANIFEST.MF">
<attribute name="Built-By" value="${user.name}" />
<attribute name="Built-Date" value="${TODAY}" />
<attribute name="Implementation-Title" value="MyApp" />
<attribute name="Implementation-Vendor" value="MyCompany" />
<attribute name="Implementation-Version" value="${version.num}-b${build.number}"/>
</manifest>
<jar destfile="${build}/myapp.jar" basedir="${build}" excludes="*.jar" />
</target>
这将创建 /META-INF/MANIFEST。MF和我可以在Eclipse中调试时读取这些值,因此:
public MyClass()
{
try
{
InputStream stream = getClass().getResourceAsStream("/META-INF/MANIFEST.MF");
Manifest manifest = new Manifest(stream);
Attributes attributes = manifest.getMainAttributes();
String implementationTitle = attributes.getValue("Implementation-Title");
String implementationVersion = attributes.getValue("Implementation-Version");
String builtDate = attributes.getValue("Built-Date");
String builtBy = attributes.getValue("Built-By");
}
catch (IOException e)
{
logger.error("Couldn't read manifest.");
}
}
但是,当我创建jar文件时,它会加载另一个jar的清单(可能是应用程序加载的第一个jar - 在我的情况下,激活.jar)。
此外,以下代码也不起作用,尽管所有正确的值都在清单文件中。
Package thisPackage = getClass().getPackage();
String implementationVersion = thisPackage.getImplementationVersion();
有什么想法吗?