2015-01-06 2 views
0

Окружающая среда: ANT 1.9.4, используя scriptdef javascript для извлечения номера версии из имени файла.Использование ant scriptdef regex, получение javascript.EvaluatorException

В выбранном каталоге найдите имена файлов с расширением .jar, получите все имена файлов, пропустите каждое имя файла, чтобы получить определенную строку и извлечь номер версии из этой строки. Для этого я использовал scriptdef javascript. Код копируется ниже.

формат Имя файла "GeneralService_V1.2.jar" & "GeneralService_V10.6_SSL.jar".

Regex выражение, используемое для получения Vx.x является "\ V \ [0-9] + \. \ [0-9] + \" (это только для второго формата файла).

Я получаю сообщение об ошибке - javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: missing; перед оператором (№ 11) в строке № 11

Его отказ от линии рисунка, я использую правильный оператор Pattern или выражение регулярного выражения не так?

<scriptdef name="jarFiles" language="javascript"> 
    <element name="fileset" type="fileset"/>    
     <![CDATA[   
      importClass(java.io.File); 
      importClass(org.apache.commons.io.FilenameUtils); 
      importClass(java.util.regex.Pattern); 
      importClass(java.lang.System); 
      filesets = elements.get("fileset"); 
       for (i = 0; i < filesets.size(); ++i) { 
       fileset = filesets.get(i);     
       Pattern pat = Pattern.compile("_\\V\\[0-9]+\\.\\[0-9]+\\_"); 
       Matcher matcher = pat.match(fileset); 
       if (matcher.find()) { 
        System.out.println(matcher.group(0)); //prints _Vx.x_ 
        String currJarVersion = matcher.group(0); 
       } else { 
        System.out.println("Match not found"); 
       }     
     ]]> 
    </scriptdef> 
    <jarFiles> 
     <fileset id="jars" dir="${svn.jar.path}"> 
       <include name="**/*.jar" /> 
     </fileset> 
    </jarFiles>     

    <propertyregex property="currJarVersion"      
        regexp="_V" 
        replace="" 
        global="true" /> 
    <echo message="${currJarVersion}"/> 

ответ

2

Есть много вещей неправильно с этим кодом ... Во-первых, вы объявили, что это будет JavaScript, но вы используете Java конструирует как типизированных переменных деклараций (Pattern pat = ...), которые JavaScript не позволяет. Во-вторых, регулярное выражение неверно, у вас слишком много обратных сбрасываемых окон. В-третьих, способ создания Matcher от Pattern называется matcher, а не match. В-четвертых, вы не можете применить регулярное выражение к FileSet, как это, вам нужно будет извлечь список имен файлов, которые соответствуют FileSet, а затем применить регулярное выражение к каждому из них. И, наконец, вы не устанавливаете свойства Ant из сценария.

Я хотел бы предложить отказаться от scriptdef вообще, как вы можете сделать отображение более просто с носителями Ant объектов, таких как pathconvert

<pathconvert pathsep="&#10;" property="currJarVersion"> 
    <fileset dir="${svn.jar.path}"> 
    <include name="**/*.jar" /> 
    </fileset> 
    <regexpmapper from="^.*_V([0-9]+\.[0-9]+).*$$" to="\1" /><!-- $ doubled for Ant --> 
</pathconvert> 
+0

Это первый раз, когда я пришел через PathConvert, она работала отлично. Благодарю. – Lola

+0

@Lola Рад, что это помогло, и добро пожаловать в Stack Overflow. Обратите внимание, что когда вы получаете ответ, который решает вашу проблему, это хорошие манеры _accept_, щелкнув галочку влево. Это показывает другим читателям с первого взгляда, что проблема решена (и это также дает бонусу репутации как ответчика, так и ответчика). –

+1

Извините, новичок в этом сайте, я нажал на галочку. Еще раз спасибо. – Lola

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