在Java中使用ANT来提取文件

mlh*_*ufe 1 java ant

我正在尝试使用Ant的功能将压缩文件的内容提取到临时文件夹.显然我在这里犯了一个或多个错误的东西,但它们碰巧是逃避我,因为网络上这类代码的例子似乎很少而且过时了:

//...

public static void extract(File src, File dest){
    String path = src.getPath();
    String ext = path.substring(path.lastIndexOf('.') + 1).toLowerCase();

    Expander expander = null;

    if(ext.equals("tar")) {
        expander = new Expander("untar","untar");
    } else if(ext.equals("jar")) {
        expander = new Expander("unzip","unzip");
    } else if(ext.equals("zip")) {
        expander = new Expander("unzip","unzip");
    } else {
        // ...
    }

    expander.setSrc(src);
    expander.setDest(dest);
    expander.execute();
}
//...
Run Code Online (Sandbox Code Playgroud)

以上内容基于:http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/antexternal.html

扩展器类:

import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.taskdefs.Expand;

class Expander extends Expand{
    public Expander(String taskType, String taskName){
        this.setProject(new Project());
        this.getProject().init();
        this.setOwningTarget(new Target());
        this.setTaskType(taskType);
        this.setTaskName(taskName);
    }
}
Run Code Online (Sandbox Code Playgroud)

在Expander构造函数中,我在运行时获得以下内容:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/AntMain
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.apache.tools.ant.Project.initProperties(Project.java:313)
    at org.apache.tools.ant.Project.init(Project.java:300)
    at Expander.<init>(Expander.java:8)
    at Main.extract(Main.java:151)
    at Main.getDeliverableFiles(Main.java:130)
    at Main.main(Main.java:36)
caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.launch.AntMain
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 18 more
Run Code Online (Sandbox Code Playgroud)

Mar*_*nor 6

蚂蚁发射罐子是从您的Java程序的类路径中失踪.

我使用Maven的搜索网站查找包含缺失类的jar:

http://search.maven.org/#advancedsearch|gav

替代方案

而不是在Java中使用这种逻辑,为什么不使用Groovy?ANT支持已融入语言:

def ant = new AntBuilder()

ant.unzip(src:"example.zip", dest:"exampleDir")
Run Code Online (Sandbox Code Playgroud)