En muchos proyectos de Java, a menudo se ve que los parámetros personalizados del programa llaman al script de shell de embalaje de comando Java. Por ejemplo,
$ Ant_home/bin/Ant, $ groovy_home/bin/groovy
, Incluso en nuestro programa de programador de Timemachine, se puede ver
$ ETMACHINE_HOME/bin/Scheduler.Sh
Es aburrido y fácil hacer estos scripts de empaque. La mayoría de los problemas provienen de establecer el ClassPath correcto en el programa. Si está desarrollando proyectos internos para una empresa, puede mantenerse alejado de la ruta enredada y el problema variable ambiental. Pero para proyectos de código abierto, las personas necesitan hacer que el embalaje sea más flexible y universal. Se proporcionaron la mayoría de las versiones .BAT. Windows DOS es de hecho una terminal brutal y restringida sin satisfacer bien su script de proyecto. Por lo tanto, a menudo animo a otros a usar Cygwi tanto como sea posible. Al menos tiene un shell Bash real. Otros problemas comunes son que estos empaques pronto perderán el control y muchos scripts redundantes aparecerán en torno a su proyecto.
Run-java empaque script introducción
Si ve el código de $ timemachine_home/bin/scheduler.sh, verá que en realidad se llama script run-java en el mismo directorio.
Dir = $ (dirname $ 0) scheduler_home = $ dir/run -java -dscheduler.home = "$ scheduler_home" timemachine.tool.tool.dulerserver "" $@"
Como puede ver, nuestra run -java puede usar la opción -d, no solo eso, ¡también puede usar la opción -cp! Además, ¡puede especificar estas opciones detrás de la clase principal! Esto puede hacer que Run-Java empaquetado por otros scripts, y aún puede agregar atributos del sistema adicionales y classPath.
Por ejemplo, Timemachine viene con la biblioteca Groovy, por lo que simplemente puede llamarlo así
Groovy: $ timemachine_home/bin/run-java groovy.groovyMain test.groovy, Sin descargar toda la rama nuevamente.
Puede usarlo fácilmente en cualquier directorio, confirma su directorio y luego cargar automáticamente cualquier paquete JAR en el directorio lib. Ahora, si desea agregar más bolsas de jar para ejecutar Groovy, puede usar la opción -CP de la siguiente manera: Opciones de CP:
$ Timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*" groovy.groovyMain test.groovyPor lo general, si configura Java classpath, a menudo causa errores cuando no tiene cuidado, pero puede ejecutarlo con anticipación con Run-Java:
Run_java_dry = 1 $ timemachine_home/bin/run-java -cp "$ home/apps/my-ap/lib/*" groovy.groovyMain test.groovy
Solo necesita ejecutar el código de línea anterior en la línea de aviso del sistema. ENCONTRARÁ LOS COMANDOS JAVA de todas las opciones y parámetros con una salida completa.
Run-Script también contiene muchas otras opciones, y puede entenderlo viendo su anotación. El script actual puede ejecutarse en cualquier cygwin de Linux Bash y Windows.
Use Run-Java a través de Maven en el desarrollo
De acuerdo con el ejemplo mencionado anteriormente, suponiendo que la estructura de lanzamiento del proyecto sea la siguiente:
$ TIMEMACHINE_HOME +-BIN/RUN-JAVA +-LIB/*.
Pero, ¿cuál es el directorio durante el proceso de desarrollo? Un caso común es: desea ejecutar el último código compilado en Target/Classes en lugar de empacar o publicar todo el proyecto. También puede usar Run-Java en este caso. En primer lugar, agregue bin/run-java a su proyecto y luego ejecute
Dependencia de compilar MVN: dependencias de copias
Todos los archivos JAR se generarán en Target/Dependency. Solo necesitas hacer esto. Run-Java detectará automáticamente estos directorio y creará el ClassPath correcto para su clase principal.
Si usa Eclipse para desarrollar, entonces su directorio de destino/clases siempre se actualizará, y Run-Java puede convertirse en un tesoro en el desarrollo de su proyecto.
Obtener script de empaque de run-java
#!/Usr/bin/env Bash ## Copyright 2012 Zemian Deng ## Licenciado bajo la licencia Apache, versión 2.0 (la "Licencia");# Es posible que no use este archivo de conformidad con el Livense.# Puede obtener un Copia de la licencia en ## http://www.apache.org/licenses/2.0## A menos que sea requerido por la ley aplicable o acordado por escrito, el software# ed bajo la licencia se distribuye en una base "como es",## Sin garantías o condiciones de cualquier tipo, expresa o implícita.# Consulte la licencia para los permisos de gobierno de idioma específico y# Limite las ationes bajo la licencia.# Un script de envoltura que ejecuta cualquier aplicación Java6 en Unix/Cygwin Env. se supone que se encuentra en el directorio "bin" de una aplicación. En cualquier lugar del sistema de archivos y aún hará referencia a este directorio# de la aplicación. Target/Test-Classes ",#" Target/Classes "y" Target/Dependency "H. Esto se puede deshabilitar mediante# configuración de run_java_no_parse = 1. ## Si el" parámetros predeterminados ". De toda la ruta debe estar en la ruta Cygwin/Unix,# y este script convertirá automáticamente la ruta de Windows donde se necesita. -cp "opción, que se postulará en classpath existente. ## use:# run-java [java_opts] <java_main_class> [-cp /más /classpath] [-dsysprop = valor] ## Ejemplo:# run-java ejemplo. Hola # ejemplo.hello -dname = world # run -java org.junit.runner.junitcore exmple.hellotest -cp "c: /apps/lib/junit4.8.2/*" ## Creado por: zemian deng 03/09/09/09/09 2012 # Este script de ejecución d d ir (resolución a la ruta absoluta) script_dir = $ (cd $ (dirname $ 0) && pwd) # Este dir es donde este script live.app_dir = $ (cd $ script_dir/.. && pd) # asumir El Dir de la aplicación es un nivel de Script DIR # Parámetros predeterminadosjava_home = $ {java_home: =/apps/jdk} # Este es el directorio de inicio de Java Development = $ classpath} # un prefijo de classpath antes de -classpath, predeterminado a $ classpathRun_Java_opts = $ {Run_java_opts: =} # java options (-xmx512m -xx: maxpermsize = 128m ETC) Run_java_debug = $ {run_java_debug: =} # If Not Empty, PRINT TH E Full Java Command Line Before Executing it.run_java_no_parse = $ {run_java_no_parse : =} # Si no está vacío, omita el análisis automático de las opciones -d y -cp desde el script argumentos.run_java_no_autocp = $ {run_java_autocp: =} # if noy, no configure automáticamente java classpathrun_java_dry = $ {run_java_dry: =} # si No vacío, no ejecute Java, pero solo propulga # OS Soporte especial. Es el ejecutable java isjava_cmd = javaif [-d "$ java_home"]; Si $ cygwin; $ Run_java_CP; $ App_dir_win/target/class "]; luego run_java_cp =" $ run_java_cp; "$ app_dir_win/lib"]; luego run_java_cp = "$ run_java_cp; $ app_dir_win/lib/*" "]; luego run_java_cp =" $ run_java_cp: $ app_dir/config "; Fi if [--d" $ app_dir/target/ Test -Class "]; -Classes"; Fi if [-d "$ app_dir/target/classes"]; /dependencia/*"; fi if [-d" $ app_dir/lib "]; luego run_java_cp =" $ run_java_cp: $ app_dir/lib/*"; d" Después de la clase principal de Java de los argumentos de script# esto se hace para conveniente conveniente Sake para que los usuarios no exporten run_java_cp y run_java_opts# ey puede pasar al final de este script run-java.# Esto puede ser desactivado por self_java_parse = 1.if [-z "$ run_java_no_parse"]; = Declarar -a new_args idx = 0 # Parse todos los argumentos y busque "-cp" y "para arg en" $@ "; do si [[-n $ found_cp]]; entonces si [" $ os "=" windows_nt "]; entonces # no puedo usar cygpath aquí, porque Cygpath se expandirá automáticamente"*", que no queremos. El usuario solo tendrá que usar la ruta del sistema operativo al especificar la opción" -cp ". #arg = $ ( Cygpath -w -a $ arg) run_java_cp = "$ run_java_cp; p =" $ run_java_cp: $ arg "fi Fouse_cp = else Case $ arg en '-cp') FOUND_CP = 1; '-D' *) run_Java_opts =" $ Run_java_opts $ arg "; *) new_args [$ idx] =" $ arg "lee t idx = $ idx +1 ;; esac fi hecho # visualizar comando java completo. If [-n" $ run_java_debug "] || [-n" "$ Run_java_dry"]; luego echo "$ java_cmd" $ run_java_opts -cp "" $ run_java_cp "" $ {new_args [@]} "fi # run java de la clase principal variables si [-z" $ run_java_dry "]; luego" $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" "" "" "" "" "" "" "" "" "" "$ {new_args [@]}" Fielse # Muestra el comando completo Java. If [ - - - - - - - - n "$ run_java_debug"] || run_java_dry "]; luego" $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" $@"fifi