void (@NotNull final VirtualFile file, final @Nullable String mainClass, final @Nullable List<String> classpath, final boolean replaceValues) { final Manifest manifest = readManifest(file); final Attributes mainAttributes = manifest.getMainAttributes(); if (mainClass != null) { mainAttributes.put(Attributes.Name.MAIN_CLASS, mainClass); } else if (replaceValues) { mainAttributes.remove(Attributes.Name.MAIN_CLASS); } if (classpath != null && !classpath.isEmpty()) { List<String> updatedClasspath; if (replaceValues) { updatedClasspath = classpath; } else { updatedClasspath = new ArrayList<>(); final String oldClasspath = (String)mainAttributes.get(Attributes.Name.CLASS_PATH); if (!StringUtil.isEmpty(oldClasspath)) { updatedClasspath.addAll(StringUtil.split(oldClasspath, " ")); } for (String path : classpath) { if (!updatedClasspath.contains(path)) { updatedClasspath.add(path); } } } mainAttributes.put(Attributes.Name.CLASS_PATH, StringUtil.join(updatedClasspath, " ")); } else if (replaceValues) { mainAttributes.remove(Attributes.Name.CLASS_PATH); } ManifestBuilder.setVersionAttribute(mainAttributes); ApplicationManager.getApplication().runWriteAction(() -> { try (OutputStream outputStream = file.getOutputStream(ManifestFileUtil.class)) { manifest.write(outputStream); } catch (IOException e) { LOG.info(e); } }); }