Wednesday 21 December 2016

Jtreg Binary Options

La distribución del río Apache incluye soporte para generar archivos binarios (JAR) y documentación del código fuente proporcionado usando la herramienta de compilación Apache Ant (disponible en el sitio del proyecto Ant en Apache. org, ant. Apache. org). Esta página describe cómo usar ant para crear la distribución desde el código fuente. Este proceso de construcción de Ant se basó originalmente en Geoff Arnolds Ant script de construcción, ubicado en user-garnold. jini. org (enlace muerto). Y le damos las gracias por su contribución. No es necesario construir los archivos JAR desde el código fuente para comenzar con la tecnología Jini. Los archivos JAR se proporcionan para usted como parte del kit de inicio, dependiendo de las opciones de instalación. La ubicación de los archivos JAR está documentada en info-index. html. En las instrucciones siguientes, installdir es el directorio en el que instaló la distribución de Apache River. NOTA: No intente construir los archivos JAR de Apache River sin tomar primero referencia a las plataformas en las que se ha probado el kit de arranque (link dead). Instrucciones de compilación Los siguientes requisitos previos deben cumplirse antes de que se pueda ejecutar una compilación: El directorio bin del SDK de Java (TM) 2, v 1.5 (o posterior) debe estar en su ruta de búsqueda de ejecución. Puede obtener el software Java en java. sun. Apache Ant, versión 1.6.2 o posterior, debe estar instalado en su sistema. Puede obtener el software Ant del sitio del proyecto Ants en ant. apache. org. Las siguientes opciones de compilación están disponibles actualmente: El parámetro debug puede usarse para reemplazar los valores predeterminados de debuglevel. Los posibles valores son none, lines, source y vars. Si dos o más valores se utilizan juntos, deben estar separados por comas (por ejemplo, líneas, fuente, vars). Consulte la documentación de javac o la sección de tareas javac de la documentación de Ant para obtener más detalles sobre estas opciones de debuglevel. Donde los objetivos básicos son: all. build Este objetivo también es el objetivo predeterminado y puede ser invocado simplemente ejecutando ant sin especificar ningún destino. Este objetivo compila los archivos de clase para todo el código fuente de distribución, genera clases de código de Java Remote Method Invocation (Java RMI) y genera los archivos configentry. Los archivos de clase y configentry se colocarán en los siguientes directorios, respectivamente: installdir / build / classes installdir / build / configentry Además, este objetivo construirá todos los subproyectos (actualmente qa y examples / hello). Jars Crea los archivos JAR para la distribución, utilizando los archivos de clase compilados. Los archivos de clase compilados ya deben haber sido creados. Los archivos JAR resultantes se colocarán en los siguientes directorios: installdir / lib installdir / lib-dl installdir / lib-ext NOTA. Durante la construcción de jarras, se generan mensajes de advertencia similares a los siguientes: java Clase anidada LogManagerProbe tiene estado diferente preferido que la clase externa LogManager Los mensajes de este tipo se esperan y no plantean ninguna preocupación a la construcción resultante. Clean Elimina los archivos de clase, los archivos configentry, los documentos, los archivos JAR y todos los directorios asociados generados durante la compilación. Doc Genera toda la documentación del kit de inicio. La documentación se colocará en el siguiente directorio: javadoc-api Genera la documentación de la API para el kit de inicio, mediante la herramienta Javadoc (TM). La documentación se colocará en el siguiente directorio: javadoc-spec Genera la documentación de sólo especificación para el kit de inicio, mediante la herramienta Javadoc (TM). La documentación se colocará en el siguiente directorio: release Este objetivo compilará todo, generará los archivos jar, generará el javadoc y producirá los bundles de distribución (binarios y de origen) en el directorio dist de nivel superior. Install-policy y uninstall-policy Este objetivo instalará / desinstalará jsk-policy. jar en el directorio de extensiones de JVM. Prueba de su construcción Hay tres arneses de prueba: Pruebas unitarias: El objetivo de construcción es prueba. Las pruebas de JUnit se proporcionan debido a la popularidad de este marco de pruebas de la Unidad, reduciendo la curva de aprendizaje inicial para los desarrolladores, permitiendo que más desarrolladores participen. Pruebas de regresión: El objetivo de compilación es jtreg del archivo build. xml del directorio qa. Jtreg es el marco de prueba de regresión para Jini, también utilizado por Suns JRE, youll necesidad de descargar jtreg por separado de openjdk. java. net/jtreg y garantizar jtreg está disponible en su ruta de ejecución. Pruebas de integración y cumplimiento: El objetivo de compilación es qa. run del archivo build. xml principal. El Jini QA Test Harness, desarrollado por Sun, específicamente para la prueba de Jini Architecture, se puede encontrar más información en el directorio qa. Si realiza modificaciones y / o correcciones a este proceso de compilación y desea que los cambios se consideren para su uso en nuestra próxima versión, envíe sus modificaciones a river-userincubator. apache. org para su consideración. Licenciado a la Apache Software Foundation (ASF) bajo uno o más acuerdos de licencia de colaborador. Consulte el archivo AVISO distribuido con este trabajo para obtener información adicional sobre la propiedad de los derechos de autor. La ASF le autoriza este archivo bajo la Licencia de Apache, Versión 2.0 (la Licencia) no puede usar este archivo excepto en conformidad con la Licencia. Usted puede obtener una copia de la Licencia en apache. org/licenses/LICENSE-2.0 A menos que sea requerido por la ley aplicable o haya sido acordado por escrito, el software distribuido bajo la Licencia se distribuye en la forma en que es, sin garantías o condiciones de ningún tipo, Ya sea expresa o implícita. Vea la Licencia para el idioma específico que rige los permisos y las limitaciones bajo las pruebas de Regresión License. README para el compilador, para usar con el arnés de prueba de regresión JDK, jtreg. El compilador es un programa para compilar el código fuente escrito en el lenguaje de programación Java en archivos de clase adecuados para su ejecución en una máquina virtual Java. También proporciona API para el procesamiento de anotaciones e invocando el compilador mediante programación. Estos comportamientos se rigen por las siguientes especificaciones: Java Language Specification (JLS) Java Virtual Machine Specification (JVMS) Java Compiler API (JSR 199) Pluggable Annotation Processing API (JSR 269) Para obtener más detalles sobre estas especificaciones, consulte la Guía javac. Estas especificaciones son controladas por el Java Community Process (JCP). Todas las implementaciones de estas especificaciones deben pasar las suites de prueba apropiadas. Requisitos del sistema javac está escrito en el lenguaje de programación Java. Como regla general, normalmente se puede compilar utilizando herramientas en la versión más reciente del JDK. (Es decir, una versión de desarrollo de javac versión 7 se puede construir con JDK versión 6, etc.) Para arrancar el compilador, también debe tener una copia del JDK de destino. Para ejecutar las pruebas del compilador, necesitará el arnés de pruebas jtreg. La fuente para el compilador es tal que se puede compilar utilizando la última versión publicada públicamente de la JDK. En la práctica, por lo general es deseable compilarlo primero usando la versión pública más reciente del JDK, y luego de nuevo usarlo a sí mismo, y La plataforma de destino en la que se ejecutará. Esto no sólo proporciona una buena prueba inicial del compilador de nueva construcción, sino que también significa que el compilador está construido con las fuentes de compilador más recientes, en contra de las bibliotecas de destino. El directorio de instalación para el compilador está configurado como un proyecto NetBeans de forma libre, por lo que para construir el compilador mediante NetBeans, sólo tiene que abrir el proyecto y construirlo de la forma normal, por ejemplo, utilizando las operaciones de la Consola menú. Para ejecutar las pruebas, tendrá que editar las propiedades en el archivo build. properties, para especificar dónde ha instalado el arnés jtreg y, posiblemente, una versión diferente de JDK para usar cuando se ejecutan las pruebas. Para crear el compilador, vaya al directorio de instalación del compilador y ejecute ant. Para ejecutar las pruebas, tendrá que editar las propiedades en el archivo build. properties, para especificar dónde ha instalado el arnés jtreg y, posiblemente, una versión diferente de JDK para usar cuando se ejecutan las pruebas. A continuación, puede ejecutar las pruebas utilizando el objetivo de prueba. Para crear el compilador, vaya al directorio de instalación del compilador y escriba make. No debe tener variables de entorno CLASSPATH y JAVAHOME establecidas al hacer esto. Para ejecutar las pruebas, tendrá que especificar dónde ha instalado el arnés jtreg y, posiblemente, una versión diferente de JDK para usar al ejecutar las pruebas. A continuación, puede ejecutar las pruebas utilizando el objetivo de prueba. Puede especificar los valores dándolos en la línea de comandos cuando ejecute make o editando los valores en Makefile. Lo que se construye Cualquiera que sea la herramienta de construcción que utilice, los resultados se colocan en el subdirectorio dist de su directorio de instalación. Los siguientes archivos serán construidos. jtreg: old and new Por jjg el 27 de mayo de 2010 jtreg 4.1 ya está disponible, y una de las nuevas características es un nuevo modo agentvm. Aquí, a través de una revisión histórica corta, es una comparación del nuevo modo agentvm frente a los modos othervm y samevm existentes. Al principio. La especificación para jtreg requiere que las pruebas se ejecuten en un directorio de borrado que se puede borrar antes de cada prueba. Las primeras versiones de Javatrade no proporcionaban la capacidad de cambiar el directorio actual cuando se ejecutaba un comando en un subproceso, por lo que las primeras versiones de jtreg se dividían en un complicado script de shell y un programa Java usando el framework de prueba JavaTesttrade. El script de shell analizó los argumentos de la línea de comandos, determinó el directorio de rascado que se utilizará y lo configuró como el directorio actual antes de ejecutar finalmente el propio arnés de prueba. Incluso en aquel entonces, había soporte para dos modos: othervm, siendo la capacidad de ejecutar todas las pruebas en su propia JVM, diferente de (excepto) la JVM utilizada para ejecutar el arnés de prueba, y samevm, siendo la capacidad de ejecutar cada prueba En la misma JVM utilizada para ejecutar el arnés de prueba. Sin embargo, para empezar, el uso de othervm fue fuertemente recomendado, ya que el riesgo de que las pruebas se afecten mutuamente era bastante alto, y la capacidad para recuperarse de pruebas excesivas fue bastante limitada. Y, aunque samevm estaba conceptualmente bien definido para ejecutar pruebas de API (ejecutar Foo principal, etc) estaba menos bien definido para las pruebas de compilación (compilación, etc) y todavía hay algún código heredado en javac que se añadió para trabajar alrededor de las limitaciones Por ejemplo, - XDstdout para forzar al compilador a escribir en el flujo utilizado por la opción jtreg compile / ref.) Y luego. Como jtreg evolucionado, el mantenimiento de la secuencia de comandos de envoltura se hizo cada vez más difícil. Eventualmente, el guión fue traducido al código Java, y se fusionó con el propio arnés. Sin embargo, el problema del directorio actual siguió siendo un problema y, después de analizar los argumentos de la línea de comandos, jtreg realizó una comprobación para ver si la JVM que se estaba utilizando era aceptable para la ejecución de la prueba misma. Esto es principalmente un problema para el modo samevm, cuando se debe establecer el directorio actual correcto, la versión correcta de Java debe estar en uso, y así sucesivamente. Si alguna de las comprobaciones falló, jtreg se reinició usando los parámetros correctos - la versión correcta de Java, el directorio actual correcto y así sucesivamente. En este caso, el código de Java se estaba comportando como una mejor escritura del envoltorio, y aunque ahora había potencialmente dos JVM implicados, haciendo el samevm del nombre algo ambiguo, el nombre del modo atascó. A lo largo del camino, el modo samevm se ha mejorado, de modo que ahora es el modo recomendado para todas las pruebas en los repositorios de OpenJDK langtools. Para ser justos, hacer que eso ocurra ha implicado cambios en el arnés de prueba, las pruebas y en un par de casos, a las herramientas en sí. Pero los beneficios han sido sustanciales, y ahora podemos ejecutar más de 1700 pruebas en sólo una sexta parte del tiempo que usaría utilizando el modo othervm. (11 minutos vs. 66 minutos en mi computadora portátil) Pero. Aunque hemos sido capaces de corregir las pruebas en los repositorios langtools para usar el modo samevm, no ha sido tan fácil encontrar los recursos para hacer lo mismo para las pruebas en los repositorios jdk. Los problemas comunes son las pruebas que no cierran los archivos abiertos cuando salen y las pruebas que intentan establecer un administrador de seguridad. Estas condiciones no son un problema al ejecutar pruebas en el modo othervm, pero ambas son problemáticas en el modo samevm. Si los archivos se dejan abiertos en el directorio scratch, en Windows se evitará que los archivos que se eliminan, lo que a su vez causará problemas para todas las pruebas posteriores en la prueba de ejecución. Establecer un administrador de seguridad siempre ha sido prohibido en samevm porque originalmente sólo se podía establecer una vez de todos modos, e incluso ahora, es posible establecer un gestor de seguridad que no se puede quitar. Juntos, estos y otros problemas, reducen significativamente el número de pruebas en los repositorios jdk que se pueden ejecutar en modo samevm, y que por lo tanto pueden beneficiarse de la mejora correspondiente en el rendimiento. Idealmente, sería posible asegurarse de que la mayoría de las pruebas se pueden ejecutar en el modo samevm. Pero actualizar las pruebas es un negocio arriesgado en el mejor de los casos, e incluso más difícil cuando los autores originales ya no están disponibles. Y así, en la práctica, ha sido más fácil mejorar el arnés de la prueba. Y entonces. El nuevo modo agentvm proporciona una forma de evitar estos problemas. Su sigue siendo un problema si una prueba deja los archivos abiertos cuando funciona en Windows, o si fija un encargado de la seguridad que no pueda ser unset, pero con el nuevo modo del agentvm, tales problemas no afectan el resto de las pruebas en la prueba funcionada. En el modo agentvm, jtreg se ejecuta en una JVM y crea JVMs con las características requeridas (versión de JDK, directorio, opciones de VM) según sea necesario para ejecutar las pruebas. Más importante aún, cuando cada prueba finaliza, jtreg hará algunas tareas domésticas para restaurar la JVM involucrada y el directorio scratch a un estado inicial estándar. Si alguna de las tareas domésticas falla por cualquier razón, las JVM pueden salir. Pero si el mantenimiento es exitoso, las JVMs se mantienen disponibles para su reutilización por cualquier prueba posterior que necesite JVMs con las mismas características. Por lo tanto, para las pruebas bien comportadas, el modo agentvm proporcionará un rendimiento similar al modo samevm, ya que no habrá ninguna sobrecarga para crear una nueva JVM para cada prueba. Sin embargo, para pruebas de menor comportamiento, el modo agentvm se degradará automáticamente a algo parecido al modo othervm, iniciando nuevas JVMs según sea necesario para cada prueba. ¿Cuántas JVMs utiliza jtreg en el modo agentvm en cualquier momento Normalmente, sólo dos: uno para ejecutar el arnés de prueba y otro para ejecutar las pruebas. Eso es lo mismo que el modo samevm, excepto su mejor, en la medida en que la JVM utilizada para ejecutar las pruebas se reiniciará si hay algún problema. Puede haber tres, porque el modo agentvm nos permite relajar las restricciones inherentes en el modo samevm de no permitir diferentes opciones JVM o incluso versiones de Java para la compilación y ejecución de pruebas. Puede hacer esto mientras mantiene el rendimiento del modo samevm, creando y utilizando JVMs de agentes diferentes con los parámetros apropiados. Así, con el modo agentvm, ahora es posible compilar pruebas usando una JVM estándar, pero para ejecutar las clases compiladas con opciones especiales de VM, como para el perfilado. Anteriormente, esta combinación sólo era posible con el modo othervm. Y, con el modo agentvm, ahora es posible compilar pruebas con una versión estándar de JDK, y ejecutar las pruebas usando una versión de la plataforma Java que no incluye javac. Anteriormente, jtreg sólo podía probar versiones de la plataforma Java que incluía javac. Nota: si las pruebas se marcan explícitamente / othervm, obviamente se ejecutarán en su propia JVM, aparte de las JVM reutilizables usadas para el resto de las pruebas. Para probar el nuevo modo agentvm, utilice la opción - agentvm en lugar de - samevm o - thervm. O bien, si ya tienes scripts o Makefiles configurados para ejecutar jtreg en el modo samevm, hay una variable de entorno backdoor que puedes establecer para usar el modo agentvm en su lugar, hasta que estés listo para confirmar cualquier cambio en tu script o Makefile: solo establece JTREGUSEAGENTVMFORSAMEVM en true . Finalmente. Tenga en cuenta que cuando utiliza el modo agentvm, no hace que los problemas de ejecutar una prueba en el modo samevm desaparezcan, lo que hace que jtreg sea más capaz de identificar y tolerar estos problemas. Cuando se producen problemas, el rendimiento se degradará a similar a la del modo othervm. Para mantener el rendimiento hasta el nivel de modo samevm, los problemas en las pruebas reportadas por jtreg todavía tendrá que ser fijo. Pero eso es una historia diferente. Gracias a Joe Darcy y Alan Bateman por sus comentarios sobre esta nota.


No comments:

Post a Comment