public JavaParameters createCommandLine()

in resin/src/main/java/org/intellij/j2ee/web/resin/ResinStartupPolicy.java [62:171]


  public JavaParameters createCommandLine(final CommonModel commonModel) throws ExecutionException {
    final ResinModel resinModel = (ResinModel)commonModel.getServerModel();
    final JmxRemotePrepareResult prepareResult;

    if (resinModel.hasJmxStrategy()) {
      prepareResult = JmxRemoteUtil.prepare(resinModel);

      JmxRemoteUtil.apply(resinModel, prepareResult);
    }
    else {
      prepareResult = null;
    }

    if (prepareResult == null) {
      resinModel.setAccessFile(null);
      resinModel.setPasswordFile(null);
    }
    else {
      resinModel.setAccessFile(prepareResult.getAccessFile());
      resinModel.setPasswordFile(prepareResult.getPasswordFile());
    }

    final ResinConfiguration resinConfiguration = resinModel.getOrCreateResinConfiguration(true);

    ResinInstallation installation = resinConfiguration.getInstallation();

    final String homePath = FileUtil.toSystemDependentName(installation.getResinHome().getPath());

    final JavaParameters parameters = new JavaParameters();

    String charset = resinModel.getCharset();
    if (charset != null && !charset.isEmpty()) {
      parameters.setCharset(Charset.forName(resinModel.getCharset()));
    }

    if (resinConfiguration.getInstallation().getVersion().allowXdebug()) {
      loadResinRunProp(DEBUG_VM_PARAMS_PROP, parameters);
    }

    ResinVersion resinVersion = resinConfiguration.getInstallation().getVersion();
    parameters.setWorkingDirectory(homePath);
    parameters.setMainClass(resinVersion.getStartupClass());

    if (resinModel.hasJmxStrategy()) {
      loadResinRunProp(JMX_VM_PARAMS_PROP, parameters, String.valueOf(resinModel.getJmxPort()));

      JmxRemoteUtil.apply(parameters.getVMParametersList(), prepareResult);
    }

    loadResinRunProp(RESINHOME_VM_PARAMS_PROP, parameters, homePath);

    if (homePath.indexOf(' ') != -1 && !allowsRunWithWhiteSpace(resinVersion)) {
      throw new ExecutionException(ResinBundle.message("resin.run.error.invalid.path", homePath));
    }

    loadResinRunProp(JAVA_LIB_PATH_VM_PARAMS_PROP, parameters, homePath);

    ParametersList parametersList = parameters.getProgramParametersList();
    parametersList.add(getResinRunProperty(COMMAND_LINE_CONF_ARG_PROP)[0],
                       resinConfiguration.getConfigFile().getAbsolutePath());
    String serverId = resinConfiguration.getServerId();
    if (!StringUtil.isEmpty(serverId)) {
      parametersList.add(getResinRunProperty(COMMAND_LINE_SERVER_ID_ARG_PROP)[0], serverId);
      loadResinRunProp(SERVER_ID_VM_PARAMS_PROP, parameters, serverId);
    }
    String additionalParameters = resinModel.getAdditionalParameters();
    if (additionalParameters != null && !additionalParameters.isEmpty()) {
      parametersList.addParametersString(additionalParameters);
    }
    loadResinConfProperties(homePath, parameters);

    final PathsList classpath = parameters.getClassPath();

    //Include application server libraries
    VirtualFile[] files = commonModel.getApplicationServer().getLibrary().getFiles(OrderRootType.CLASSES);
    for (VirtualFile file : files) {
      classpath.add(file.getPresentableUrl());
    }

    File[] allJars = resinConfiguration.getInstallation().getLibFiles(true);
    for (File jar : allJars) {
      String s = jar.getAbsolutePath();
      if (!classpath.getPathList().contains(s)) {
        classpath.add(s);
      }
    }

    if (resinModel.isAutoBuildClassPath()) {
      Collection<VirtualFile> outputAndLibs = new ArrayList<>();
      for (DeploymentModel model : commonModel.getDeploymentModels()) {
        final Artifact artifact = model.getArtifact();
        if (artifact == null) {
          continue;
        }
        final Collection<WebFacet> webFacets =
          JavaeeArtifactUtil.getInstance().getFacetsIncludedInArtifact(commonModel.getProject(), artifact, WebFacet.ID);
        for (WebFacet webFacet : webFacets) {
          ModuleRootManager mrm = ModuleRootManager.getInstance(webFacet.getModule());
          final VirtualFile[] roots = mrm.orderEntries().withoutSdk().recursively().exportedOnly().getClassesRoots();
          Collections.addAll(outputAndLibs, roots);
        }
      }

      for (VirtualFile vfile : outputAndLibs) {
        classpath.add(vfile);
      }
    }

    return parameters;
  }