antclassloader无法加载org.apache.tools.ant.taskdefs.optional.perforce.p4sync类

camsedfj  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(179)

我正试图从junit测试中执行一个ant目标。
我已经将org.apache.tools.ant.taskdefs.optional类构建到jar x中。但是,antclassloader找不到在taskdef中声明的这个“可选”类
无法使用classloader antclassloader[]找到org.apache.tools.ant.taskdefs.optional.perforce.p4sync
我的代码基于这个例子。https://alvinalexander.com/java/jwarehouse/apache-ant-1.7.0/src/main/org/apache/tools/ant/taskdefs/classloader.java.shtml
测试调用configureproject(),然后调用project.executetarget()

import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path;
import org.junit.rules.ExternalResource;

public class Why extends ExternalResource

private Project project;
private static final String CLASSPATH = "/Users/square/build_directory/lib/x.jar"

public void configureProject(String filename, Map<String, String> properties) throws BuildException {

// Commented/removed irrelevant code, log lines.

project = new Project();
System.clearProperty(MagicNames.PROJECT_BASEDIR); //The build XML is in a parent directory while this code is in a submodule.
project.init();
File antFile = new File(System.getProperty(TEST_ROOT_DIRECTORY), filename);
project.setProperty(TEST_PROCESS_ID, ProcessUtil.getProcessId("<Process>"));
project.setProperty(TEST_THREAD_NAME, Thread.currentThread().getName());
project.setUserProperty(ANT_FILE, antFile.getAbsolutePath());

for (Map.Entry<String, String> entry : properties.entrySet()) {
    project.setUserProperty(entry.getKey(), entry.getValue());
}

//project.addBuildListener(new AntTestListener(Project.MSG_DEBUG));

//Possibly the most relevant part
Object obj = project.getReference(MagicNames.SYSTEM_LOADER_REF);

AntClassLoader acl = (AntClassLoader) obj;

if (acl == null) {
    parent = this.getClass().getClassLoader();
    acl = new AntClassLoader((ClassLoader) parent,
             project, new Path(project));
    project.addReference(MagicNames.SYSTEM_LOADER_REF, acl);
    acl.addLoaderPackageRoot("org.apache.tools.ant.taskdefs.optional");
    project.setCoreLoader(acl);
}

acl.addPathElement(CLASSPATH);        
project.setCoreLoader(acl);

ProjectHelper.configureProject(project, antFile);

}```

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题