我有一个清单文件位于" .. plugins / xyz.abc.e.tool.sa.app / META-INF / MANIFEST.MF"
我想复制Build-version:3.15.0.vqualifier并将其放在另一个位置的新Manifest文件中作为Build-version:3.15.0。有人可以帮助我完成我需要在ANT脚本中进行的更改吗?
<target name="create_sacode_jar">
<loadproperties srcFile="${buildDirectory}/plugins/xyz.abc.e.tool.sa.rcp/META-INF/MANIFEST.MF">
<filterchain>
<linecontains>
<contains value="Bundle-Version" />
</linecontains>
</filterchain>
</loadproperties>
<jar destfile="${buildDirectory}/../bin/SACode.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Bundle-Version" value="${Bundle-Version}" />
<attribute name="Class-Path" value="." />
</manifest>
<fileset dir="${buildDirectory}/plugins/xyz.abc.e.tool.sa.Generator/@dot" />
<fileset dir="${buildDirectory}/plugins/xyz.abc.e.tool.sa.SAcode/@dot" />
</jar>
</target>
答案 0 :(得分:0)
jar清单不是属性文件。它们看起来很相似,但是使用的格式不同。
Here是属性文件的格式。
Here是jar清单的格式。
其中的区别是:
据我所知,没有标准的Ant任务可以读取单个清单条目。但是,您可以“作弊”并使用script:
<script language="javascript">
var Manifest = Java.type("java.util.jar.Manifest");
var Files = Java.type("java.nio.file.Files");
var Paths = Java.type("java.nio.file.Paths");
var BufferedInputStream = Java.type("java.io.BufferedInputStream");
var path = Paths.get(
project.getProperty("buildDirectory"),
"plugins/xyz.abc.e.tool.sa.rcp/META-INF/MANIFEST.MF");
var stream = new BufferedInputStream(Files.newInputStream(path));
var manifest = new Manifest(stream);
stream.close();
var version = manifest.getMainAttributes().getValue("Bundle-Version");
project.setProperty("Bundle-Version", version);
</script>