}
protected ProtocolMetaData doDeploy(Archive<?> archive) throws DeploymentException {
String sdkDir = configuration.getSdkDir();
if (new File(sdkDir).isDirectory() == false)
throw new DeploymentException("SDK root is not a directory: " + sdkDir);
String app;
try {
app = getAppLocation().getCanonicalPath();
} catch (IOException e) {
throw new DeploymentException("Cannot get app location.", e);
}
try {
log.info(archive.toString(true));
List<String> args = new ArrayList<String>();
addArg(args, "email", configuration.getEmail(), false);
addArg(args, "host", configuration.getHost(), true);
addArg(args, "compile_encoding", configuration.getEncoding(), true);
addArg(args, "proxy", configuration.getProxy(), true);
addArg(args, "passin", configuration.isPassIn());
if (configuration.isPassIn() == false)
addArg(args, "disable_prompt", configuration.isPrompt());
addArg(args, "enable_jar_splitting", configuration.isSplitJars());
addArg(args, "retain_upload_dir", configuration.isKeepTempUploadDir());
args.add("update");
args.add(app);
invokeAppEngine(sdkDir, "com.google.appengine.tools.admin.AppCfg", args.toArray(new String[args.size()]));
String host = configuration.getHost();
if (host == null) {
host = readAppId(archive) + ".appspot.com";
}
String serverURL = configuration.getServerURL();
if (serverURL == null) {
serverURL = "http://" + host;
}
delayArchiveDeploy(serverURL + "/index.html", configuration.getStartupTimeout(), 60 * 1000L);
return getProtocolMetaData(host, 80, archive);
} catch (Exception e) {
List<String> args = Arrays.asList("rollback", app);
try {
invokeAppEngine(sdkDir, "com.google.appengine.tools.admin.AppCfg", args.toArray(new String[args.size()]));
} catch (Exception ignored) {
}
throw new DeploymentException("Cannot deploy to local GAE.", e);
}
}