我想在我的Ant脚本中添加一个目标,它读取jar的清单并在末尾附加一个新的jar。我看过loadproperties
任务,它看起来很接近,但是当类路径在多行之间分割时无法处理。那么,有人知道这是否可以使用开箱即用的Ant任务吗?
update
模式下的清单任务似乎是显而易见的答案。
根据这里的代码,我将其修改为读取现有的类路径,在末尾附加一个新的jar文件,然后将其保存到一个属性中。此时,很容易使用清单任务写回。
public void execute() throws BuildException {
validateAttributes();
checkFileExists();
JarFile jarFile = null;
Manifest manifest = null;
try {
jarFile = new JarFile(directory + "/" + jar);
manifest = jarFile.getManifest();
Attributes attributes = manifest.getMainAttributes();
String currClasspath = attributes.getValue("Class-Path");
String newClasspath = currClasspath.concat(" ").concat(append);
getProject().setProperty(propertyName, newClasspath);
} catch (IOException e) {
throw new BuildException();
} finally {
if (manifest != null) {
manifest = null;
}
if (jarFile != null) {
try {
jarFile.close();
} catch (IOException e) {}
jarFile = null;
}
}
}
为空格省略的getter/setter/utility方法。然后Ant代码看起来像这样:
<target name="addToClasspath" depends="build">
<property name="testPath" value="C:/"/>
<taskdef name="manifestAppender" classname="ClasspathAppender" />
<manifestAppender dir="${testPath}" jar="wbclasspath.jar" append="test.jar" property="newClasspath" />
<echo>Manifest class-path: ${newClasspath}</echo>
<jar destfile="${testPath}/wbclasspath.jar">
<manifest>
<attribute name="Class-Path" value="${newClasspath}" />
</manifest>
</jar>
</target>