如何在现有 jar 的清单中读取,并使用 Ant 附加到其类路径

  • 本文关键字:Ant 路径 jar 读取 单中 java ant
  • 更新时间 :
  • 英文 :


我想在我的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>

相关内容

  • 没有找到相关文章

最新更新