Menggunakan regex ant scriptdef, mendapatkan javascript.EvaluatorException

Lingkungan : ANT 1.9.4, menggunakan javascript scriptdef untuk mengambil nomor versi dari nama file.

Di direktori yang dipilih, temukan nama file dengan ekstensi .jar, dapatkan semua nama file, ulangi setiap nama file untuk mengambil string tertentu dan ekstrak nomor versi dari string tersebut. Saya menggunakan javascript scriptdef untuk mencapai ini. Kode disalin di bawah.

Format nama file adalah "GeneralService_V1.2.jar" & "GeneralService_V10.6_SSL.jar".

Ekspresi regex yang digunakan untuk mengambil Vx.x adalah "\V\[0-9]+\.\[0-9]+\" ( ini hanya untuk format nama file kedua).

Saya mendapatkan kesalahan - javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: missing ; sebelum pernyataan (#11) pada baris nomor 11

Gagal pada garis pola, apakah saya menggunakan pernyataan Pola yang benar atau ekspresi regex salah?

    <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}"/> 

person Lola    schedule 06.01.2015    source sumber


Jawaban (1)


Ada banyak hal yang salah dengan kode ini... Pertama, Anda telah mendeklarasikannya sebagai JavaScript tetapi Anda menggunakan konstruksi Java seperti deklarasi variabel yang diketik (Pattern pat = ...) yang tidak diizinkan oleh JavaScript. Kedua, ekspresi regulernya salah, ada terlalu banyak hal yang lolos dari garis miring terbalik. Ketiga, metode untuk membuat Matcher dari Pattern disebut matcher, bukan match. Keempat, Anda tidak dapat menerapkan ekspresi reguler ke FileSet seperti ini, Anda perlu mengekstrak daftar nama file yang cocok dengan FileSet dan kemudian menerapkan ekspresi reguler ke masing-masing file secara bergantian. Dan yang terakhir, bukan itu cara Anda menyetel properti Ant dari skrip.

Saya menyarankan untuk mengabaikan scriptdef sama sekali karena Anda dapat melakukan pemetaan jauh lebih sederhana dengan fasilitas Ant asli seperti 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>
person Ian Roberts    schedule 06.01.2015
comment
Ini adalah pertama kalinya saya menemukan pathconvert, ini bekerja dengan sempurna. Terima kasih. - person Lola; 06.01.2015
comment
@Lola Senang ini membantu, dan selamat datang di Stack Overflow. Perhatikan bahwa ketika Anda mendapatkan jawaban yang memecahkan masalah Anda, sebaiknya menerima dengan mengeklik tanda centang di sebelah kiri. Hal ini menunjukkan sekilas kepada pembaca lain bahwa masalahnya telah terpecahkan (dan ini juga memberikan bonus reputasi bagi penanya dan penjawab). - person Ian Roberts; 07.01.2015
comment
Maaf, baru di situs ini, saya mengklik tanda centang. Terima kasih lagi. - person Lola; 07.01.2015