使用java中的groovy.util.AntBuilder

在groovy中,groovy.util.AntBuilder可用于例如。 将文件解压缩到一个文件夹中:

AntBuilder ant = new AntBuilder(); ant.unzip(src: file.getPath(), dest: outputFolder.getPath()); 

现在我想用java做同样的事情。 它不可能直接调用解压缩。 我假设这是invokeMethod的用途:

  AntBuilder ant = new AntBuilder(); String[] args = new String[4]; args[0] = "src"; args[1] = file.getPath(); args[2] = "dest"; args[3] = outputFolder.getPath(); ant.invokeMethod("unzip", args); 

以上给出:

  No signature of method: groovy.util.AntBuilder.unzip() is applicable for argument types: (java.lang.String, java.lang.String, java.lang.String, java.lang.String) values: 

有任何想法吗?

我曾尝试使用google文档/示例从java中使用AntBuilder,但我只找到了从groovy中使用它的示例。

是的,到了一台电脑并试了一下:

鉴于此Java类:

 import groovy.util.AntBuilder ; import java.io.File ; import java.util.HashMap ; public class Test { public static void main( String[] args ) throws Exception { if( args.length != 2 ) { System.err.println( "Need 2 args. Input zip file and output folder" ) ; System.exit( 1 ) ; } final File file = new File( args[ 0 ] ) ; final File outputFolder = new File( args[ 1 ] ) ; AntBuilder ant = new AntBuilder() ; ant.invokeMethod( "unzip", new HashMap() {{ put( "src", file.getPath() ) ; put( "dest", outputFolder.getPath() ) ; }} ) ; } } 

然后你可以用以下代码编译它:

 javac -cp $GROOVY_HOME/embeddable/groovy-all-2.0.5.jar Test.java 

然后运行:

 java -cp $GROOVY_HOME/lib/*:. Test /path/to/zip /destination/folder 

它应该工作

 import groovy.lang.Closure; import groovy.util.AntBuilder; 

 final AntBuilder ant = new AntBuilder(); ant.invokeMethod("echo", "copy & sync gestartet..."); ant.invokeMethod("sync", new Object[] { new HashMap() { { this.put("todir", "./myordner2"); this.put("verbose", "yes"); } }, new Closure(null) { @Override public Object call(Object... args) { ant.invokeMethod("fileset", new Object[] { new HashMap() { { this.put("dir", "c:/myordner1/test"); } }}); return null; } } }); 

我找到了这个解决方案。 😉