下面列出了org.eclipse.ui.wizards.datatransfer.ProjectConfigurator#org.apache.tools.ant.taskdefs.Expand 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static int unzip(File src,File dest){
int res = -1;
try {
Project prj=new Project();
Expand expand=new Expand();
expand.setProject(prj);
expand.setSrc(src);
expand.setOverwrite(true);
expand.setDest(dest);
expand.execute();
res = 1;
} catch (BuildException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
private void unzipJar(String jar)
throws IOException
{
File jarFile = new File(jar);
LOG.info("unzip jar {} to {}", jar, expandDir.getCanonicalPath());
Expand expand = createExpand(jarFile);
expand.execute();
}
private Expand createExpand(File jarFile)
{
String outputDir = expandDir + File.separator + jarFile.getName();
Project prj = new Project();
FileSet fileSet = createFileSetForJarFile(jarFile, prj);
PatternSet patternSet = createPatternSet(prj);
Expand expand = new Expand();
expand.setProject(prj);
expand.setOverwrite(true);
expand.setDest(new File(outputDir));
expand.addFileset(fileSet);
expand.addPatternset(patternSet);
return expand;
}
@Test
public void test() throws Exception {
ReadableByteChannel channel = null;
try {
channel = Channels.newChannel(new URL("https://github.com/apache/cordova-app-hello-world/archive/master.zip").openStream()); //$NON-NLS-1$
} catch (IOException ex) {
Assume.assumeNoException("This test require ability to connect to Internet", ex); //$NON-NLS-1$
}
File outputFile = File.createTempFile("cordova-app-hello-world", ".zip"); //$NON-NLS-1$ //$NON-NLS-2$
FileOutputStream fos = new FileOutputStream(outputFile);
fos.getChannel().transferFrom(channel, 0, Long.MAX_VALUE);
channel.close();
fos.close();
Expand expand = new Expand();
expand.setSrc(outputFile);
File outputDirectory = Files.createTempDirectory("cordova-app-hello-world").toFile(); //$NON-NLS-1$
expand.setDest(outputDirectory);
expand.execute();
outputFile.delete();
Set<IProject> newProjects = null;
SmartImportJob job = new SmartImportJob(outputDirectory, Collections.EMPTY_SET, true, true);
try {
Map<File, List<ProjectConfigurator>> proposals = job.getImportProposals(new NullProgressMonitor());
Assert.assertEquals("Expected only 1 project to import", 1, proposals.size()); //$NON-NLS-1$
boolean thymConfiguratorFound = false;
for (ProjectConfigurator configurator : proposals.values().iterator().next()) {
if (configurator instanceof CordovaProjectConfigurator) {
thymConfiguratorFound = true;
}
}
Assert.assertTrue("Cordova configurator not found while checking directory", thymConfiguratorFound); //$NON-NLS-1$
// accept proposals
job.setDirectoriesToImport(proposals.keySet());
IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
Set<IProject> beforeImport = new HashSet<>(Arrays.asList(wsRoot.getProjects()));
job.run(new NullProgressMonitor());
job.join();
newProjects = new HashSet<>(Arrays.asList(wsRoot.getProjects()));
newProjects.removeAll(beforeImport);
Assert.assertEquals("Expected only 1 new project", 1, newProjects.size()); //$NON-NLS-1$
IProject newProject = newProjects.iterator().next();
boolean startsWith = newProject.getLocation().toFile().getAbsolutePath().startsWith(outputDirectory.toPath().toRealPath().toAbsolutePath().toString());
Assert.assertTrue(startsWith);
HybridProject hybridProject = HybridProject.getHybridProject(newProject);
Assert.assertNotNull("Project not configured as hybrid", hybridProject); //$NON-NLS-1$
} finally {
if (newProjects != null) {
for (IProject project : newProjects) {
project.delete(true, true, new NullProgressMonitor());
}
}
}
}
protected void installFromFile() throws Exception {
// Check if there is a different/newer archive or missing marker to trigger assembly install
File installMarker = new File(installDirectory, ".installed");
if (!refresh) {
if (!installMarker.exists()) {
refresh = true;
} else if (assemblyArchive.lastModified() > installMarker.lastModified()) {
log.debug(MessageFormat.format(messages.getString("debug.detect.assembly.archive"), ""));
refresh = true;
} else if(!assemblyArchive.getCanonicalPath().equals(FileUtils.fileRead(installMarker))) {
refresh = true;
}
} else {
log.debug(MessageFormat.format(messages.getString("debug.request.refresh"), ""));
}
String userDirectoryPath = userDirectory.getCanonicalPath();
if (refresh && installDirectory.exists() && installDirectory.isDirectory()) {
log.info(MessageFormat.format(messages.getString("info.uninstalling.server.home"), installDirectory));
// Delete everything in the install directory except usr directory
for(File f : installDirectory.listFiles()) {
if(!(f.isDirectory() && f.getCanonicalPath().equals(userDirectoryPath))) {
FileUtils.forceDelete(f);
}
}
}
// Install the assembly
if (!installMarker.exists()) {
log.info("Installing assembly...");
FileUtils.forceMkdir(installDirectory);
Expand unzip = (Expand) ant.createTask("unzip");
unzip.setSrc(assemblyArchive);
unzip.setDest(assemblyInstallDirectory.getCanonicalFile());
unzip.execute();
// Make scripts executable, since Java unzip ignores perms
Chmod chmod = (Chmod) ant.createTask("chmod");
chmod.setPerm("ugo+rx");
chmod.setDir(installDirectory);
chmod.setIncludes("bin/*");
chmod.setExcludes("bin/*.bat");
chmod.execute();
// delete installMarker first in case it was packaged with the assembly
installMarker.delete();
installMarker.createNewFile();
// Write the assembly archive path so we can determine whether to install a different assembly in future invocations
FileUtils.fileWrite(installMarker, assemblyArchive.getCanonicalPath());
} else {
log.info(MessageFormat.format(messages.getString("info.reuse.installed.assembly"), ""));
}
}