flex - Cómo determinar qué archivos compila MXMLC
compiler-construction (3)
Necesito una forma de registrar mediante programación qué archivos fuente se consumen en una compilación MXMLC. Lo ideal sería que se pase una bandera a MXMLC para que informe la lista completa de los archivos fuente que está compilando, pero no parece que exista tal indicador. En general, parece que acaba de pasar un archivo main.mxml a MXMLC y se apaga y compila todo lo que necesita sin decirle lo que está haciendo. Por lo que puedo decir, tampoco puedes listar explícitamente los archivos para que compile; resolverá las referencias automáticamente y compilará las fuentes referenciadas sin ninguna forma de controlar ese comportamiento o informar sobre él.
Si el compilador no puede proporcionar esta información y un usuario no puede controlar este comportamiento, la única otra opción que puedo pensar es escribir mi propio escáner de código fuente para MXML que recorra todas las referencias en un árbol de códigos para dar un informe de lo que MXMLC debería estar compilando, aunque eso obviamente es propenso a errores y ciertamente no es algo que estoy esperando.
Por supuesto, dado que no tengo mucha experiencia con Flex, puede haber una respuesta obvia que me falta.
Gracias
De hecho, no sé y me gustaría saber cómo hacer lo que dices a través de la línea de comandos, sería genial. Pero sin la posibilidad de hacerlo, creo que podrías usar un descompilador para examinar tu swf, algo así como Trillix. Estoy bastante seguro de que te mostrará todas las clases en las que se ha compilado (de lo que se resolvió es otra historia). Para ver a qué archivos se accede, puede (si usa Windows) usar: http://technet.microsoft.com/en-us/sysinternals/bb896645, pero tendrá que filtrar un poco para ver el proceso mxmlc solo. (es bastante fácil allí). En cuanto a una respuesta directa, me encantaría ver una, pero estas son algunas soluciones por ahora para ver un poco más de lo que está sucediendo bajo el capó. Sobre el mismo tema, pero no necesariamente relacionado con su problema particular en este momento, Charles y Wireshark son buenos para capturar mucho sobre lo que sucede con el tráfico de red si tiene problemas extraños y necesita algunas herramientas de depuración.
Creo que en la compilación de un swc puedes ser un poco más explícito y si abres un swc con un programa de archivo puedes mirar el catalog.xml y ver una lista de los archivos a los que se hace referencia, pero no estoy seguro de cómo es esto. utilizado en el IDE o en tiempo de compilación. Hay una referencia aquí http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_30.html pero no tiene mucha profundidad. Escribí una pequeña aplicación de Java para hacer la extracción y buscar alguna clase en particular para descubrir cómo una clase finalmente entraba en nuestro código desde un antiguo SDK, definitivamente no era divertido.
Shaun
De todo lo que vi, parecía que la única forma de capturar esta información en tiempo de compilación es escribir su propio programa java que llama a las clases de compilador Flex. En realidad, hay algunas maneras diferentes de hacerlo, pero el método que utilicé se basó en el ejemplo de informe que comienza en la página 10 del siguiente pdf:
http://blogs.adobe.com/flexdoc/files/flexdoc/oem/oem_guide.pdf
Todo lo que me interesaba saber eran las dependencias de archivos para la compilación, para poder vincularlas a las versiones de origen en el control de versiones. Por eso razono, omití las secciones de Definiciones, Dependencias y Prerrequisitos del ejemplo al que se hace referencia. La idea básica es construir un objeto flex2.tools.oem.Application, ejecutar el método "build" en él, y luego usar el método getReport para obtener todos los detalles sangrientos de la compilación. Aquí hay una versión simplificada de cómo se veía mi código de solución:
File file = new File ("C:/MyFlexApp/main.mxml");
File outputFile = new File("C:/MyFlexApp/bin/Foo.swf");
Application application = new Application(file);
application.setOutput(outputFile);
Configuration config = application.getDefaultConfiguration();
File[] libFile = new File[] {new File("C:/MyFlexApp/bin/baz.swc")};
config.addLibraryPath(libFile);
application.setConfiguration(config);
application.build(true);
report = application.getReport();
Message[] m = report.getMessages();
if (m != null)
{
for (int i=0; i<m.length; i++)
{
System.out.println(m[i].getLevel().toUpperCase() +
" MESSAGE " + i + ": " + m[i]);
}
}
// Lists the image files that are embedded.
System.out.println("/n/nEMBEDDED ASSETS: ");
String[] assetnames = report.getAssetNames(Report.COMPILER);
if (assetnames != null)
{
for (int i=0; i<assetnames.length; i++)
{
System.out.println(assetnames[i]);
}
}
// Lists the libraries that are used.
System.out.println("/nLIBRARIES: ");
String[] compilerLibs = report.getLibraryNames(Report.COMPILER);
if (compilerLibs != null)
{
for (int i=0; i<compilerLibs.length; i++)
{
System.out.println(compilerLibs[i]);
}
}
System.out.println("/nSOURCE NAMES: ");
String[] src = report.getSourceNames(Report.COMPILER);
if (src != null)
{
for (int i=0; i<src.length; i++) {
// Lists source files.
System.out.println(src[i]);
}
}
Gracias a Shaun por toda la ayuda que me llevó a esta solución.
Deberías encontrar lo que buscas en el informe del enlace:
Agregue este parámetro a sus argumentos de compilación:
-link-report output.xml
Le da una tonelada de información, por lo que también hay una práctica herramienta de AIR para analizar los resultados.