2012-05-01 2 views
1

У меня есть файл Ant, где я создаю zip-файл и манифест для нескольких файлов JAR. Как zip, так и манифест ссылаются на те же библиотеки, но несколько по-разному. Если возможно, я хотел бы объединить ссылки на файлы, а не писать их дважды, и надеяться, что ссылки в обеих задачах будут синхронизированы. Ниже приведен пример того, что я делаю сейчас.Ant задача фильтрации JAR для zip-файла и манифеста

<target name="zip" depends="default"> 
    <zip destfile="${dist.dir}/${project.name}_v${project.version}.zip"> 
    <zipfileset prefix="lib" dir="lib/Dom4J" includes="*.jar"/> 
    <zipfileset prefix="lib" dir="lib/GSON" includes="*.jar"/> 
    <zipfileset prefix="lib" dir="lib/Guava" includes="*.jar"/> 
    <!-- ... A bunch more (Note I don't want everything 
      in the lib directory, just certain subfolders 
      within the lib directory which are explicitly 
      listed here like GSON. --> 
    </zip> 
</target> 

<target name="createManifest"> 
    <!-- Hard code the classpath by hand and hope 
     they sync up with the zip task --> 
    <property name="mfClasspath" 
      value="dom4j-1.6.1.jar gson-2.1.jar guava-11.0.2.jar" /> 
    <!-- Code to use the mfClasspath when creating the manifest 
     omitted for brevity --> 
</target> 

Что в идеале хотелось бы иметь это fileset какой-то, что я мог бы ссылаться в обеих задач. Обратите внимание, что манифест не содержит никаких папок/путей. В манифесте содержатся только файлы JAR, найденные в каталогах, упомянутых в задаче zip.

ответ

1

Вы правы. Вы можете выполнить это с общим fileset, совместно используемым задачами zip и createManifest. Для задачи zip скопируйте файлы во временное место, а затем закройте их.

Для задачи createManifest используйте замену символов, чтобы удалить папки с путей. Стратегии замены символов обсуждаются в «Replacing characters in Ant property». Если у вас есть Ant-Contrib, вы можете упростить алгоритм замены символов ниже, используя PropertyRegex Ant task.

<project default="all"> 
    <fileset id="jars" dir="."> 
     <include name="lib/Dom4J/dom4j-1.6.1.jar" /> 
     <include name="lib/GSON/gson-2.1.jar" /> 
     <include name="lib/Guava/guava-11.0.2.jar" /> 
    </fileset> 

    <target name="zip"> 
     <copy todir="tmp.dir" flatten="true"> 
      <fileset refid="jars" /> 
     </copy> 
     <zip destfile="example.zip"> 
      <zipfileset dir="tmp.dir" prefix="lib" /> 
     </zip> 
     <delete dir="tmp.dir" /> 
    </target> 

    <target name="createManifest"> 
     <property name="jars.property" refid="jars" /> 
     <echo message="${jars.property}" file="some.tmp.file" /> 
     <loadfile property="mfClasspath" srcFile="some.tmp.file"> 
      <filterchain> 
       <tokenfilter> 
        <replaceregex pattern="(?:[^;/]+/)+?([^;/]+\.jar)" 
         replace="\1" flags="g" /> 
        <replacestring from=";" to=" " /> 
       </tokenfilter> 
      </filterchain> 
     </loadfile> 
     <delete file="some.tmp.file" /> 
    </target> 

    <target name="all" depends="zip, createManifest"> 
     <echo message="$${jars.property} = &quot;${jars.property}&quot;" /> 
     <echo message="$${mfClasspath} = &quot;${mfClasspath}&quot;" /> 
    </target> 
</project> 

Когда я выполнил выше Ant Buildfile, следующее было сдвинуто консоли:

Buildfile: /workspace/StackOverflow/build.xml 
zip: 
     [zip] Building zip: /workspace/StackOverflow/example.zip 
    [delete] Deleting directory /workspace/StackOverflow/tmp.dir 
createManifest: 
    [delete] Deleting: /workspace/StackOverflow/some.tmp.file 
all: 
    [echo] ${jars.property} = "lib/Dom4J/dom4j-1.6.1.jar;lib/GSON/gson-2.1.jar;lib/Guava/guava-11.0.2.jar" 
    [echo] ${mfClasspath} = "dom4j-1.6.1.jar gson-2.1.jar guava-11.0.2.jar" 
BUILD SUCCESSFUL 
Total time: 675 milliseconds 

Кроме того, example.zip содержал следующие записи:

  • Lib /dom4j-1.6.1.jar
  • li б/gson-2.1.jar
  • Библиотека/гуавы-11.0.2.jar
+0

Отлично, спасибо большое !!! Мне пришлось сделать небольшое изменение в регулярном выражении (поскольку мой манифест использует обратную косую черту), но он работает как шарм! – user973479

+0

'' – user973479

Смежные вопросы