例如
/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
答案 0 :(得分:6)
您遇到的问题是Ant属性的不变性 - 一旦设置了属性,通常就无法更改该值。
第一次围绕循环设置filename
属性,并且该值“粘住”。
从Ant 1.8开始,local
task允许您将属性本地化为当前执行块。例如,您的sequential
将是:
<sequential>
<local name="filename" />
<basename property="filename" file="@{file}"/>
<echo message="${filename}"/>
</sequential>
Ant会在顺序结束时忘记属性,因此可以在每次迭代中使用新值。
答案 1 :(得分:3)
我已经用蚂蚁做了一段时间,但是你试过一个foreach吗?
<foreach>
<fileset dir="${test.dir}/lib">
<include name="**/*.jar"/>
</fileset>
<echo message="${foreach.file}"/>
</foreach>
答案 2 :(得分:1)
Here's a solution with Ant Addon Flaka针对类似的问题/解决方案,只需根据您的需求进行调整。
答案 3 :(得分:0)
这是我如何列出目录中的文件。
bool within_arc3(double p1, double p2, double p3) {
p1 = fmod(p1, 360);
return fmod(fmod(p2, 360) - p1 + 2*360, 360) >= fmod(fmod(p3, 360) - p1 + 2*360, 360);
}
答案 4 :(得分:0)
获取文件名列表及其大小。
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应用程序中的嵌入式解释器 wiki
Nashorn是Oracle使用Java编程语言开发的JavaScript 符合ECMA标准的引擎。它基于Da Vinci Machine(JSR 292),并已与Java 8一起发布._
jdk.nashorn.api.scripting.NashornScriptEngine
openjdk
在Java SE 7之前,JDK附带了一个基于Mozilla Rhino的JavaScript脚本引擎。 Java SE 8将改为使用名为Oracle Nashorn的新引擎,该引擎基于JSR 292和invokedynamic。它通过调用动态绑定的调用站点提供更好的符合ECMA规范化JavaScript规范和更好的运行时性能。
Nashorn extensions以及nashorn已经支持的一些Rhino特定扩展。 例如:
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"))
只有在加载nashorn提供的兼容性脚本时才支持很少的Rhino / Mozilla扩展。使用“load('nashorn:mozilla_compat.js
”)