Содержимое каталога Ant-списка в пользовательском формате

#java #xml #deployment #ant #build

#java #xml #развертывание #ant #сборка

Вопрос:

Я использую Ant для создания своего программного обеспечения. Ant создает XML-файл с echoxml помощью функции, а затем предоставляет созданный XML-файл другой специальной программе.

Теперь я хотел бы перечислить содержимое каталога в echoxml теге.

Как это можно сделать? Мой окончательный XML-файл должен выглядеть примерно так, предоставляя только путь к каталогу:

<SomeXmlTag>

<cp>directory/firstFile.jar</cp>

cp>directory/secondFile.jar</cp>

<cp>directory/XYZFile.jar</cp>

</SomeXmlTag>

Ответ №1:

EchoXML — это ant tast, который уже указан для использования вложенной строки xml в качестве своего содержимого, выводя это содержимое непосредственно в файл (или на консоль). Итак, согласно документации, это не удовлетворяет вашим потребностям.

Однако довольно просто изменить стандартную задачу ant, чтобы сделать это, используя расширения javax xml и вместе с файловым api.

Сначала посмотрите http://ant.apache.org/manual/Tasks/echoxml.html , и подтвердите, что EchoXML не делает то, что вам нужно.

Теперь простым решением является реализация вашей собственной задачи записи xml… чтобы просто написать свой собственный класс :

 public class MyFileTreeWriter extends Task {
    public void execute() {
           File dirs = new File("./");
           //Alternatively, you can use apache's FileUtils directory walkers https://commons.apache.org/io/api-1.4/index.html?org/apache/commons/io/DirectoryWalker.html      

  // Psuedo code below,  uses standard javax.xml.* packages ... 
  for (String file : dirs.listFiles()){
  Element em = document.createElement("file");
  em.appendChild(document.createTextNode(file);
  rootElement.appendChild(em); 

    }
}
  

А затем добавьте это в свою сборку :

 <target name="use" description="MyFileTreeWriter task" depends="jar">
    <taskdef name="writeDirs" classname="MyFileTreeWriter" classpath="${ant.project.name}.jar"/>
</target>