protected static NodeInstallInformation getNodeInstallationInformation(String version, File directory) throws MojoExecutionException {
		String baseURL = "http://nodejs.org/dist/v" + version + "/";
		String basePath = directory.getAbsolutePath() + File.separator;
		String arch;
		if (Os.isArch("x86") || Os.isArch("i386")) {
			arch = "x86";
		} else if (Os.isArch("x86_64") || Os.isArch("amd64")) {
			arch = "x64";
		} else {
			throw new MojoExecutionException("Unsupported OS arch: " + Os.OS_ARCH);
		}

		NodeInstallInformation result = new NodeInstallInformation();
		try {
			if (Os.isFamily(Os.FAMILY_WINDOWS) || Os.isFamily(Os.FAMILY_WIN9X)) {
				result.url = new URL(baseURL + "node.exe");
				result.archive = new File(basePath + "node-" + version + ".exe");
				result.executable = new File(basePath + "node-" + version + ".exe");
			} else if (Os.isFamily(Os.FAMILY_MAC)) {
				result.url = new URL(baseURL + "node-v" + version + "-darwin-" + arch + ".tar.gz");
				result.archive = new File(basePath + "node-v" + version + "-darwin-" + arch + ".tar.gz");
				result.executable = new File(basePath + "node-v" + version + "-darwin-" + arch + File.separator + "bin" + File.separator + "node");
			} else if (Os.isFamily(Os.FAMILY_UNIX)) {
				result.url = new URL(baseURL + "node-v" + version + "-linux-" + arch + ".tar.gz");
				result.archive = new File(basePath + "node-v" + version + "-linux-" + arch + ".tar.gz");
				result.executable = new File(basePath + "node-v" + version + "-linux-" + arch + File.separator + "bin" + File.separator + "node");
			} else {
				throw new MojoExecutionException("Unsupported OS: " + Os.OS_FAMILY);
			}
		} catch (java.net.MalformedURLException ex) {
			throw new MojoExecutionException("Malformed node URL", ex);
		}
		return result;
	}