#java #ant
#java #ant
Вопрос:
Я хочу добавить цель в свой Ant-скрипт, который считывает манифест jar и добавляет новый jar в конце. Я посмотрел на loadproperties
task, и он казался близким, но не мог справиться, когда путь к классу разделен на несколько строк. Итак, кто-нибудь знает, возможно ли это с помощью готовых Ant-задач?
Комментарии:
1. Возможно, было бы полезно упомянуть очевидный ответ и почему он не подходит для этой задачи.
Ответ №1:
Задача манифеста в update
режиме может показаться очевидным ответом.
Комментарии:
1. Если я установлю путь к классу в задаче манифеста в режиме обновления, это перезапишет то, что уже есть. Я хочу добавить. Очевидно, что это должно произойти ПОСЛЕ того, как существующий путь к классу уже был прочитан и изменен.
Ответ №2:
Основываясь на приведенном здесь коде, я изменил его, чтобы читать в существующем пути к классам, добавить новый файл 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;
}
}
}
Методы получения / установки / утилиты опущены для пробела. Тогда код 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>