2016-03-10 4 views
0

Я пытаюсь запустить работу Ant в Maven, чтобы посмотреть папку и на основе того, сколько папок в этой папке, создать x количество zip-файлов с именем папки. Я работаю вручную, но было бы неплохо, если бы мне не пришлось редактировать pom каждый раз, когда я добавлял новую папку в эту структуру.Ant-Zip Multiple Folders

<configuration> 
    <target name="zip"> 
     <zip destfile="root/sub1/sub1.jar"> 
     <zipfileset dir="root/sub1/unpacked/" includes="**" ></zipfileset> 
     </zip> 
    </target> 
</configuration> 

Если бы я добавить SUB2 в корневую директорию, то хотелось бы, чтобы забрать автомагически и создать файл sub2.jar (да, я знаю, я использую .jar, но программа, которая принимает эти файлы ожидает .jar файлы, но они не коробит файлы в том, что они содержат какой-либо код Java, они просто пронестись файлы с расширениями баночке)

Я попытался это

Спасибо, я посмотрел первую ссылку, но, возможно, я делаю это неправильно

<target name="checkDir"> 
    <foreach target="zip" param="theFile"> 
     <dirset dir="root" casesensitive="yes"> 
      <include name="**"/> 
     </dirset> 
    </foreach> 
    </target> 
<target name="zip"> 
<!-- <zip destfile="root/${theFile}/${theFile}.jar"> 
          <zipfileset dir="root/${theFile}/unpacked/" includes="**" ></zipfileset> 
</zip> --> 
<echo message="${theFile}"/> 
</target> 

Я просто

[INFO] --- Maven-antrun-плагин: 1,7: запустить (процесс использования JavaScript-плагин) @ войны --- [INFO] Выполнение задач

зип: [эхо] $ {theFile} [INFO] Выполняемые задачи


Тем не менее, кажется, не работает.

pom.xml

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>1.7</version> 
       <executions> 
        <execution> 
         <id>process-cartridges</id> 
         <phase>compile</phase> 
         <configuration> 
         <target> 
          <ant antfile="root/build-main.xml"/> 
         </target> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

наращивание main.xml Не кажется

<?xml version="1.0" encoding="UTF-8" ?> 
<project> 
    <target name="checkDir"> 
     <foreach target="zip" param="theFile"> 
      <dirset dir="root" casesensitive="yes"> 
       <include name="**"/> 
      </dirset> 
     </foreach> 
    </target> 
    <target name="zip"> 
     <zip destfile="root/${theFile}/${theFile}.jar"> 
      <zipfileset dir="root/${theFile}/unpacked/" includes="**" /> 
     </zip> 
     <echo message="TESTZIP ${theFile}"/> 
    </target> 
</project> 

не работает. Я что-то пропустил?

+0

Вопрос, который приходит мне на ум - это то, что упаковано именно так? – khmarbaise

+0

Это всего лишь коллекция файлов XML. Почему это делается именно так, это не моя забота, как таковая, поскольку это внутренний продукт, который я должен использовать, и я не говорю об изменениях, поэтому мне просто нужно кататься с ним! Использование ant-jar бросает в папки META-INF, поэтому я этого не делаю. –

+0

Простейшим решением, которое я мог бы сделать, является использование maven-assembly-plugin с соответствующим дескриптором .... – khmarbaise

ответ

2

Вы можете использовать задачу Ant, чтобы сделать это, объединив ответы от этих двух должностей: Ant: How to execute a command for each file in directory? и Calling foreach in maven-antrun-plugin.

Однако, вы также можете иметь решение Maven с помощью iterator-maven-plugin для перебора всех вложенных папок, а затем использовать maven-jar-plugin сделать банку:

<plugin> 
    <groupId>com.soebes.maven.plugins</groupId> 
    <artifactId>iterator-maven-plugin</artifactId> 
    <version>0.3</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>iterator</goal> 
     </goals> 
     <configuration> 
     <folder>root/</folder> 
     <pluginExecutors> 
      <pluginExecutor> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.6</version> 
      </plugin> 
      <goal>jar</goal> 
      <configuration> 
       <classesDirectory>root/@[email protected]/unpacked</classesDirectory> 
       <outputDirectory>root/@[email protected]</outputDirectory> 
       <finalName>@[email protected]</finalName> 
      </configuration> 
      </pluginExecutor> 
     </pluginExecutors> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Это привязанный к package фазе. Он будет перебирать все прямые подпапки папки root и вызывать плагин jar с заданной конфигурацией. @[email protected] используется для обозначения текущего имени каталога.

+0

Спасибо, что я посмотрел первую ссылку, но, возможно, я делаю это неправильно обновил главный пост –

+0

@ ChrisO'Brien Я знаю, поэтому я добавил вторую ссылку: у вас не может быть более двух целей. Но я бы предложил использовать другое решение с помощью iterator-maven-plugin. – Tunaki

+0

Прохладный. Я вникаю в это.Плагин maven не может быть вариантом, поскольку это внутреннее репо, но я буду иметь в виду, если внешний файл ant не работает. Благодаря! –