Попытка получить имена всех файлов в каталоге с помощью ANT - PullRequest
4 голосов
/ 16 декабря 2011

Например,

/test/a.jar
/test/b.jar
/test/c.jar

output:
a.jar
b.jar
c.jar

Это работает по большей части, за исключением того, что кажется, что он получает только один из файлов, а не все = /

       <for param="file">
            <path>
                <fileset dir="${test.dir}/lib">
                    <include name="**/*.jar"/>
                </fileset>
            </path>
            <sequential>
                <basename property="filename" file="@{file}"/>
                <echo message="${filename}"/>
            </sequential>
        </for>

Это только у меня:

c.jar
c.jar
c.jar

Ответы [ 5 ]

6 голосов
/ 16 декабря 2011

Проблема, с которой вы столкнулись, заключается в неизменности свойств Ant - после того, как свойство установлено, значение обычно не может быть изменено.

При первом цикле задается свойство filename, и это значение «залипает».

Начиная с Ant 1.8 задача local позволяет локализовать свойство в текущем блоке выполнения. Например, ваш sequential будет:

<sequential>
    <local name="filename" />
    <basename property="filename" file="@{file}"/>
    <echo message="${filename}"/>
</sequential>

Ant забывает свойство в конце последовательности, поэтому в каждой итерации можно использовать новое значение.

3 голосов
/ 16 декабря 2011

Я давно уже ничего не делал с муравьем, но пробовал ли ты foreach?

   <foreach>
        <fileset dir="${test.dir}/lib">
            <include name="**/*.jar"/>
        </fileset>
        <echo message="${foreach.file}"/>
   </foreach>
1 голос
/ 17 декабря 2011

Вот решение с Ant Addon Flaka для аналогичного вопроса / решения, просто адаптируйте его под свои нужды.

0 голосов
/ 21 февраля 2018

Чтобы получить список имен файлов вместе с их размерами.

E:\ANT>ant -buildfile=nashornFileNames.xml
Buildfile: E:\ANT\nashornFileNames.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="MyProject" basedir="." default="fileNames">

    <property environment="env"/>
    <property name="library.file" value="E:\\ANT\\JAR"/>


    <condition property="fileSep" value="\"><os family="windows"/></condition>
    <condition property="fileSep" value="/"><os family="unix"/></condition>

    <target name="fileNames" depends="showEnv">
        <!-- script run both on rhino and nashorn -->
        <script language="javascript"> <![CDATA[
            // "nashorn:" pseudo URL scheme for nashorn's built-in scripts.
            // To support Rhino load Mozilla compatibility script - which defines global functions like importPackage, importClass for rhino compatibility.
            load("nashorn:mozilla_compat.js");

            // Accessing Java packages and classes from script. Nashorn's recommended way to access Java classes is to use Java.type.
            importPackage(java.io) // Rhino extensions: importPackage global function
            importClass(java.lang.System); // Rhino extensions:  global.importClass

            var File = java.io.File; // Rhino way!
            var String = Java.type("java.lang.String"); // Nashorn way!

            // Access to Ant-Properties by their names
            basedir  = self.getProject().getProperty("basedir");
            fileSep  = project.getProperty("fileSep");
            System.out.println(" [script command-line] Java API : " + fileSep);

            // create and use a Task via Ant API
            echo = self.getProject().createTask("echo");
            function setMessage( msg ) {
                echo.setMessage( msg );
                echo.perform();
            }
            setMessage("[echo Task] Ant API : " + basedir );

                // <fileset dir="" includes=""/> « https://ant.apache.org/manual/Types/fileset.html
                var fileset = project.createDataType("fileset");

                files  = project.getProperty("library.file");
                setMessage("files: " + files);
                fileset.setDir( new File( files ) );
                fileset.setIncludes("**/*.jar");

            // Get the files (array) of that fileset
            ds = fileset.getDirectoryScanner( self.getProject() );

            fileset_files = ds.getIncludedFiles(); // Get only the files

            // iterate over that array
            for (i=0; i < fileset_files.length; i++) {

                var basedir  = fileset.getDir( self.getProject() );
                var filePath = fileset_files[i];
                var folders = filePath.split(fileSep).slice(0,-1).join(fileSep);
                var fileName = filePath.split(fileSep).slice(-1)[0];
                var file = new File(basedir, filePath);
                var fileSize = file.length();

                setMessage(folders + "« FileName : "+ fileName +" : " + fileSize + " byte");
            }
        ]]></script>
    </target>
    <target name="showEnv">
        <echo message="java.io.tmpdir = ${java.io.tmpdir}"/>
        <echo message="windows tmpdir = ${env.TMP}"/>
        <echo message="windows JAVA_HOME = ${env.JAVA_HOME}"/>
        <echo message="windows ANT_HOME = ${env.ANT_HOME}"/>
    </target>
</project>

Oracle Nashorn в качестве инструмента командной строки ив качестве встроенного интерпретатора в приложениях Java вики

Nashorn - это движок JavaScript ECMA-совместимый , разработанный на языке программирования JavaOracle.Он основан на Da Vinci Machine (JSR 292) и выпущен с Java 8. _ jdk.nashorn.api.scripting.NashornScriptEngine openjdk

До Java SE 7 JDK поставлялись с механизмом сценариев JavaScript, основанным на Mozilla Rhino.Вместо этого Java SE 8 будет поставляться с новым механизмом Oracle Nashorn, который основан на JSR 292 и invokedynamic.Он обеспечивает лучшее соответствие нормализованной спецификации JavaScript ECMA и лучшую производительность во время выполнения через сайты вызовов с динамическими связями.

Расширения Nashorn и некоторые из Rhino определенное расширение, которое уже поддерживается nashorn.Пример:

var String = Java.type("java.lang.String"); // Nashorn way!
var Array = java.lang.reflect.Array // Rhino way!

// collections are interpreted as arrays.
var arr = [ "hello", "world" ];
var list = Java.to(array, Java.type("java.util.List"))

Существует несколько расширений Rhino / Mozilla, которые поддерживаются, только если вы загружаете скрипт совместимости, предоставляемый nashorn.Сценарий совместимости загружается с использованием «load ('nashorn:mozilla_compat.js»)

0 голосов
/ 11 мая 2017

Вот как я перечисляю файлы в каталоге.

<fileset id="filesref" dir="path/to/dir" includes="*"/>
<property name="files" refid="filesref"/>

<echo message="Files:${line.separator}" />
<for list="${files}" delimiter=";" param="file" >
    <sequential>
        <echo message="    @{file}"/>
        <!--Do more stuff with the file's name here-->
    </sequential>
</for>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...