El problema es que un perfil administrado realmente se almacena en su espacio de trabajo, no en su proyecto. Los ajustes se insertan en su proyecto cuando realiza cambios específicos del proyecto, como la selección de un perfil diferente. Pero las configuraciones en el proyecto son de un formato diferente al del perfil (en el espacio de trabajo).
En la actualidad, eclipse no tiene la capacidad de realizar esto al revés. Es decir, no puede tomar configuraciones de la carpeta del proyecto para crear un perfil en el área de trabajo. Efectivamente, un "Perfil no administrado" es un perfil en el que ha perdido el código fuente.
La forma más sencilla que he encontrado para realizar una ingeniería inversa del perfil es generar un archivo de perfil XML que se puede importar (en la configuración del formateador -> botón de importación).
Para realizar una ingeniería inversa de la configuración de un proyecto; Escribí el siguiente programa. Se lee la configuración de una carpeta de proyecto y las escribe como un archivo 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();
}
}
Esa parece ser la respuesta. Lo que he estado haciendo para evitar esto es realizar ediciones en un perfil personalizado en otro proyecto, exportarlo y observar qué elementos cambiaron y hacer los mismos cambios en la copia de .settings. – magneticMonster