Em muitos projetos Java, é frequentemente visto que os parâmetros personalizados do programa chamam o script de shell de embalagem de comando java. Por exemplo,
$ ANT_HOME/BIN/ANT, $ GROOVY_HOME/BIN/GROOVY
, Mesmo em nosso programa Timemachine Scheduler, pode ser visto
$ etmachine_home/bin/scheduler.sh
É chato e fácil fazer esses scripts de embalagem. A maioria dos problemas vem da definição do caminho de classe correto para o programa. Se você estiver desenvolvendo projetos internos para uma empresa, poderá ficar longe do caminho emaranhado e do problema da variável ambiental. Mas para projetos de código aberto, as pessoas precisam tornar a embalagem mais flexível e universal. A maioria das versões .BAT foi fornecida. O Windows DOS é realmente um terminal brutal e restrito sem atender bem ao seu script do projeto. Portanto, muitas vezes incentivo os outros a usar o Cygwi o máximo possível. Pelo menos tem uma verdadeira casca de festa. Outros problemas comuns são que essas embalagens perderão o controle em breve e muitos scripts redundantes aparecerão em torno do seu projeto.
Introdução ao script de embalagem de java run
Se você vir o código de $ timemachine_home/bin/scheduler.sh, verá que ele é realmente chamado de script run-java no mesmo diretório.
Dir = $ (Dirname $ 0) Scheduler_home = $ DIR/RUN -JAVA -DSCHEDULER.HOME = "$ Scheduler_home" Timemachine.tool.tool.dulerserver "" $@"
Como você pode ver, nosso Java Run pode usar a opção -d, não apenas isso, ele também pode usar a opção -cp! Além disso, você pode especificar essas opções por trás da classe principal! Isso pode tornar o run-java embalado por outros scripts e ainda pode adicionar atributos adicionais do sistema e caminho de classe.
Por exemplo, Timemachine vem com a biblioteca Groovy, para que você possa simplesmente chamá -lo assim
Groovy: $ timemachine_home/bin/run-java groovy.groovymain test.groovy, Sem baixar a filial inteira novamente.
Você pode usá -lo facilmente em qualquer diretório, ele confirma seu diretório e, em seguida, carrega automaticamente qualquer pacote JAR no diretório Lib. Agora, se você quiser adicionar mais sacolas de jarra para executar o Groovy, poderá usar a opção -cp da seguinte forma: Opções do CP:
$ Timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*" groovy.groovymain test.groovyNormalmente, se você configurar o Java ClassPath, geralmente causa erros quando não tomar cuidado, mas pode executá-lo com antecedência com o Run-Java:
Run_java_dry = 1 $ timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*" groovy.groovymain test.groovy
Você só precisa executar o código da linha acima na linha de prompt de comando. Ele produzirá os comandos Java de todas as opções e parâmetros com uma saída completa.
O Run-Script também contém muitas outras opções, e você pode entendê-lo visualizando sua anotação. O script atual pode ser executado em qualquer Bash Linux e Windows Cygwin.
Use Run-Java através do MAVEN em desenvolvimento
De acordo com o exemplo mencionado acima, assumir que a estrutura de liberação do projeto é a seguinte:
$ Timemachine_home +-bin/run-java +-lib/*jar
Mas qual é o diretório durante o processo de desenvolvimento? Um caso comum é: você deseja executar o código compilado mais recente em Target/Classes, em vez de embalar ou publicar todo o projeto. Você também pode usar o Run-Java neste caso. Primeiro de tudo, adicione bin/run-java ao seu projeto e depois corra
Dependência de compilação da MVN: dependências de cópias
Todos os arquivos JAR serão gerados sob destino/dependência. Você só precisa fazer isso. O Run-Java detectará automaticamente esses diretórios e criará o caminho de classe correto para sua classe principal.
Se você usar o Eclipse para se desenvolver, seu diretório de destino/classes será sempre atualizado e o Run-Java poderá se tornar um tesouro no desenvolvimento do seu projeto.
Obtenha o script de embalagem de Java Run
#!/Usr/bin/Env Bash ## Copyright 2012 Zemian Deng ## Licenciado sob a licença Apache, versão 2.0 (a "licença");# Você não pode usar esse arquivo em conformidade com o Livense.# Você pode obter um Cópia da licença em ## http://www.apache.org/license/2.0##, a menos que exigido pela lei aplicável ou acordada por escrito, o software# ED sob a licença é distribuído em uma base "como está",# Sem garantias ou condições de qualquer tipo, expresso ou implícito Presume -se que esteja localizado no diretório "BIN" de um aplicativo. Em qualquer lugar no sistema de arquivos e ainda referenciará este diretório# do aplicativo. Target/Classes de teste ",#" Target/Classes "e" Target/Dependência "H De todo o caminho deve estar no caminho Cygwin/Unix,# e esse script converterá automaticamente o caminho do Windows, onde é necessário. -cp "Opção, que postará o fixo existente. Olá, exemplo.hello -dname = mundo # run -java org.junit.runner.junitcore exmple.hellotest -cp "c: /apps/lib/junit4.8.2/*" ## criado por: zemian Deng 03/09/09/09/09 2012 # este script de execução D D Ir (resolver o caminho O diretor do aplicativo é um nível acima do script dir # Parametersjava_home = $ {java_home: =/Apps/jdk} # Este é o diretório inicial do Java Development = $ ClassPath} # um prefixo de classe antes do -classpath, padrão para $ classe = $ {Run_java_Opts: =} # Java Options (-xmx512m -xx: maxPermsize = 128m etc) run_java_debug = $ {run_java_debug: =} # se não é vazio, imprimir th e java comanha antes de executing.run _JAV: : =} # Se não estiver vazio, pule a análise automática das opções -d e -cp dos argumentos do script.run_java_no_autocp = $ {run_java_autocp: =} # se note, não configure automaticamente java classrunTathPath = #dry = $ {run_java run, não Não é vazio, não execute o comprometimento do Java, mas apenas o suporte especial do OS. É o Java Executável isjava_cmd = javaif [-d "$ java_home"]; $ cygwin; $ Run_java_cp; $ APP_DIR_WIN/Target/classe "]; então run_java_cp =" $ run_java_cp; "$ app_dir_win/lib"]; teste -class "]; -Classes"; /dependência/*"; fi if [-d" $ app_dir/lib "]; então run_java_cp =" $ run_java_cp: $ app_dir/lib/*"; d" após a classe principal java de argumentos de script# Isso é feito para conveniente para conveniente Sake So Usuários para não exportar RUN_JAVA_CP e RUN_JAVA_OPTS# EY pode passar para o final deste script run-java. = Declarar -a new_args idx = 0 # analisar todos os argumentos e procurar "-cp" e "para arg em" $@ "; faça if [[-n $ Found_cp]]; então se [" $ os "=" windows_nt "]; então # não pode usar o CyGPath aqui, porque o CyGPath expandirá automaticamente"*", o que não queremos. O usuário só terá que usar o caminho do sistema operacional ao especificar a opção" -cp ". #arg = $ ( Cygpath -w -a $ arg) run_java_cp = "$ run_java_cp; p =" $ run_java_cp: $ arg "fi fout_cp = else case $ arg em '-cp') found_cp = 1; '-d' *) run_java_opts =" $; Run_java_opts $ arg "; *) new_args [$ idx] =" $ arg "lee t idx = $ idx +1 ;; esac fi feito # exibir comando java completo. Se [-n" $ run_java_debug "] || [-n "$ Run_java_dry"]; $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" "" "" "" "" "" "" "" "" "" "$ {new_args [@]}" fielse # exibir comando java completo. se [ - - n "$ run_java_debug"] || [-n "$ run_java_dry"]; run_java_dry "]; então" $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" $@"fifi