Problem polega na tym, że profil zarządzany jest rzeczywiście przechowywany w obszarze roboczym, a nie w projekcie. Ustawienia są przekazywane do projektu po wprowadzeniu określonych zmian, takich jak wybór innego profilu. Ale ustawienia w projekcie mają inny format niż te w profilu (w obszarze roboczym).
Obecnie Eclipse nie ma możliwości wykonania tego w odwrotnej kolejności. Oznacza to, że nie można pobrać ustawień z folderu projektu, aby utworzyć profil w obszarze roboczym. Skutecznie "Profil niezarządzany" to profil, do którego utraciłeś kod źródłowy.
Najprostszym sposobem, w jaki znalazłem inżynierię wsteczną, jest wygenerowanie pliku profilu XML, który można zaimportować (w ustawieniach formatera -> przycisk importowania).
Aby dokonać inżynierii wstecznej ustawień z projektu; Napisałem następujący program. Odczytuje ustawienia z folderu projektu i zapisuje je w pliku XML:
import java.io.*;
public class ExtractFormatter {
public static void main(String args[]) throws IOException {
if (args.length < 2)
throw new RuntimeException("No arguements specified; expected <project folder> <output file>");
File inFile = new File(args[0]);
File outFile = new File(args[1]);
BufferedReader reader = new BufferedReader(new FileReader(new File(inFile,
".settings/org.eclipse.jdt.core.prefs")));
PrintWriter writer = new PrintWriter(outFile);
writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
// Retain the date from the file as a comment
String line = reader.readLine();
writer.println("<!-- Exported from " + inFile + " -->");
writer.println("<!-- " + line + " -->");
writer.println("<profiles version=\"12\">");
writer.println("<profile kind=\"CodeFormatterProfile\" name=\"" + inFile.getName()
+ "\" version=\"12\">\")");
// Now read every setting for the formatter and write it out as an XML tag.
for (line = reader.readLine(); line != null; line = reader.readLine()) {
if (line.startsWith("org.eclipse.jdt.core.formatter.")) {
String[] parts = line.split("=", 2);
writer.println("<setting id=\"" + parts[0] + "\" value=\"" + parts[1] + "\" />");
}
}
writer.println("</profile>");
writer.println("</profiles>");
reader.close();
writer.close();
}
}
To wydaje się być odpowiedź. Pracowałem nad tym, aby wprowadzić zmiany w profilu niestandardowym w innym projekcie, eksportując go i sprawdzając, które elementy zostały zmienione i wprowadzając te same zmiany w kopii .set. – magneticMonster