2013-12-13 2 views
0

Моей проблемы в том, что я должен построить манифест запись из пути к классам путей, какс помощью муравьев манифеста здания входа пути от пути баночки зависимостей

  • C: \ Users \ rosansamuel.ivy2 \ кэш \ log4j \ log4j \ jars \ log4j-1.2.14.jar

Не могли бы вы предложить какие-либо идеи?

Ниже код, я пытаюсь с propertyregex, но на самом деле я не могу получить имена баннеров.

<for list="${ofsml.manifest.classpath.list}" delimiter=";" param="individual.path"> 
    <sequential> 
    <property name="single.artifact.path" value="@{individual.path}"/> 
    <echo message="single aritfact path name : ${single.artifact.path}"/> 
    <path id="my.base.path"> 
     <pathelement path="${single.artifact.path}"/> 
    </path> 
    <property name="artifact.id.file" refid="my.base.path"/> 
    <echo message=" artifact.id.file: ${artifact.id.file}"/> 
    <propertyregex property="artifact.id" input="${artifact.id.file}" regexp=".*.jar" select="\1"/> 
    <echo message="jar name : ${artifact.id}"/> 
    <echo message="individual.path = @{individual.path}"/> 
    </sequential> 
</for> 
+0

Не понимаю, что вы просите, но это, кажется, как вам нужно получить имя файла только из абсолютного пути к файлу?! Для этой цели есть задача . Также при использовании \ 1 ваше регулярное выражение должно иметь группу, т. Е. . + \\ (. + jar) означает, что \ 1 будет ловить log4j-1.2.14.jar из C: \ Users \ rosansamuel.ivy2 \ cache \ log4j \ log4j \ jars \ log4j-1.2.14.jar – Rebse

+0

Привет, да вы правы. мое требование состоит в том, чтобы извлечь только имя jar из пути. Но у меня есть список путей. – androidgalaxyman

ответ

0

Существует manifestclasspath задачи в ANT, который может генерировать список относительных путей файлов из набора файлов.

Я также вижу, что вы используете плющ, так почему бы не использовать его задачу retrieve, чтобы разместить баны с зависимостями в локальном каталоге относительно создаваемой банки. В противном случае ваша фляга будет жестко закодирована, чтобы ожидать, что ее зависимости будут абсолютным путем, который работает на вашем компьютере, но не очень переносимым.

Вот небольшой отрывок:

<target name="build" depends="compile"> 
    <ivy:retrieve pattern="${dist.dir}/lib/[artifact].[ext]"/> 

    <manifestclasspath property="jar.classpath" jarfile="${dist.jar}"> 
     <classpath> 
     <fileset dir="${dist.dir}/lib" includes="*.jar"/> 
     </classpath> 
    </manifestclasspath> 

    <jar destfile="${dist.jar}" basedir="${build.dir}/classes"> 
     <manifest> 
     <attribute name="Main-Class" value="${dist.main.class}"/> 
     <attribute name="Class-Path" value="${jar.classpath}"/> 
     </manifest> 
    </jar> 
    </target> 

Для более полного примера см: