Ejemplo n.º 1
0
  /* (non-Javadoc)
   * @see de.enough.polish.jar.Packager#doPackage(java.io.File, java.io.File, de.enough.polish.Device, de.enough.polish.preprocess.BooleanEvaluator, java.util.Map, org.apache.tools.ant.Project)
   */
  public void createPackage(
      File sourceDir, File targetFile, Device device, Locale locale, Environment env)
      throws IOException, BuildException {
    PackageSetting setting = getSetting();
    env.addVariable("polish.packageDir", sourceDir.getAbsolutePath());

    String executable = env.writeProperties(setting.getExecutable());
    String argumentsStr = env.writeProperties(setting.getArguments());
    String[] arguments = StringUtil.splitAndTrim(argumentsStr, ";;");
    String[] parameters = new String[arguments.length + 1];
    parameters[0] = executable;
    System.arraycopy(arguments, 0, parameters, 1, arguments.length);

    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(parameters);

    try {
      String info = executable;
      if (info.indexOf(File.separatorChar) != -1) {
        info = info.substring(info.indexOf(File.separatorChar));
      }
      info += ": ";
      LoggerThread.log(process, info);
      int result = process.waitFor();
      if (result != 0) {
        System.err.println("Call to external packager was: ");
        for (int i = 0; i < parameters.length; i++) {
          System.err.print(parameters[i] + " ");
        }
        System.err.println();
        throw new BuildException("External packager failed with result [" + result + "].");
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
      throw new BuildException("External packager was interrupted.");
    }
  }