Среда: ANT 1.9.4, использование javascript scriptdef для получения номера версии из имени файла.
В выбранном каталоге найдите имена файлов с расширением .jar, получите все имена файлов, переберите каждое имя файла, чтобы получить определенную строку, и извлеките номер версии из этой строки. Для этого я использовал javascript scriptdef. Код скопирован ниже.
Формат имени файла: «GeneralService_V1.2.jar» и «GeneralService_V10.6_SSL.jar».
Выражение регулярного выражения, используемое для извлечения Vx.x, имеет вид "\V\[0-9]+\.\[0-9]+\" (это только для второй формат имени файла).
Я получаю сообщение об ошибке - javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: отсутствует; перед оператором (#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}"/>