Во многих проектах Java часто можно увидеть, что программа пользовательских параметров вызывает сценарий оболочки с командной упаковкой Java. Например,
$ Ant_home/bin/ant, $ groovy_home/bin/groovy
, Даже в нашей программе планировщика TimeMachine можно увидеть
$ etmachine_home/bin/scheduler.sh
Это скучно и легко сделать эти упаковочные сценарии. Большинство проблем возникают из -за установления правильной дороги для программы. Если вы разрабатываете внутренние проекты для компании, то вы можете держаться подальше от запутанного пути и проблемы с переменной окружающей среды. Но для проектов с открытым исходным кодом люди должны сделать упаковку более гибкой и универсальной. Большинство версий .bat были предоставлены. Windows DOS действительно является жестоким и ограниченным терминалом, не удовлетворяя ваш проект сценарий. Поэтому я часто призываю других использовать Cygwi как можно больше. По крайней мере, у него настоящая оболочка. Другие распространенные проблемы заключаются в том, что эта упаковка скоро потеряет контроль, и вокруг вашего проекта появятся многие избыточные сценарии.
Введение сценария упаковки run-java
Если вы видите код $ timemachine_home/bin/scheduler.sh, вы увидите, что он на самом деле называется сценарием Run-Java в том же каталоге.
Dir = $ (dirname $ 0) pradeuler_home = $ dir/run -java -dscheduler.home = "$ scheduler_home" timemachine.tool.tool.dulerserver "" $@"
Как вы можете видеть, наша run -java может использовать опцию -d, не только это, но и может использовать опцию -cp! Более того, вы можете указать эти варианты, стоящие за основным классом! Это может сделать run-java, упакованную другими сценариями, и все еще может добавить дополнительные атрибуты системы и класс.
Например, Timemachine поставляется с Groovy Library, так что вы можете просто назвать это так
Groovy: $ timemachine_home/bin/run-java gravy.grovymain test.groovy, Без загрузки всего филиала снова.
Вы можете легко использовать его в любом каталоге, он подтверждает его каталог, а затем автоматически загружать любой пакет JAR в каталог LIB. Теперь, если вы хотите добавить больше баночных мешков для запуска Groovy, вы можете использовать опцию -CP следующим образом: Параметры CP:
$ TimeMachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*"Обычно, если вы настраиваете Java ClassPath, вы часто выносите ошибки, когда вы не будете осторожны, но вы можете запустить его заранее с Run-Java:
Run_java_dry = 1 $ timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*"
Вам нужно только запустить вышеуказанный код строки в строке командной строки. Он выведет команды Java всех параметров и параметров с полным выходом.
Run-Script также содержит много других вариантов, и вы можете понять его, просмотрев его аннотацию. Текущий скрипт может работать в любом Linux Bash и Windows Cygwin.
Используйте run-java через Maven в разработке
Согласно примеру, упомянутому выше, предполагая, что структура выпуска проекта выглядит следующим образом:
$ Timemachine_home +-bin/run-java +-lib/*
Но что такое каталог во время процесса разработки? Общий случай: вы хотите запустить последний скомпилированный код в целевой/классах вместо упаковки или публикации всего проекта. Вы также можете использовать Run-Java в этом случае. Прежде всего, добавьте в свой проект Bin/Run-Java, а затем запустите
Зависимость от компиляции MVN: зависимость от копирования
Все файлы JAR будут генерироваться в целевой/зависимости. Вам нужно только сделать это. Run-Java автоматически обнаружит этот каталог и создаст правильный класс для вашего основного класса.
Если вы используете Eclipse для разработки, то ваш каталог цели/классов всегда будет обновляться, а Run-Java может стать сокровищем в разработке вашего проекта.
Получить сценарий упаковки Java
#!/Usr/bin/env bash ## copyright 2012 Zemian Deng ## Лицензирован по лицензии Apache, версия 2.0 («Лицензия»);# Вы не можете использовать этот файл в соответствии с Livense.# Вы можете получить Копия лицензии по адресу ## http://www.apache.org/licenses/6license-2.0##, если не требуется применимый законодательство или не согласовано в письменной форме, программное обеспечение № по лицензии распространяется на «как есть». # Без каких -либо гарантий или условий, выраженных или подразумеваемых.# См. Лицензию на конкретные языковые разрешения и ограничения# в соответствии с лицензией.# Скрипт обертки, который запускает любое приложение Java6 в Unix/Cygwin Env. Предполагается, что этот сценарий находится в каталоге «Bin». # Запустите в любом случае в файловой системе, и он по -прежнему будет ссылаться на этот каталог приложения#. Как «Target/Test-Class»,# «Target/Classes» и «Target/Devility» h. Значения всего пути должны быть в пути Cygwin/Unix,#, и этот скрипт будет автоматически преобразовать путь Windows, где необходимо. Опция «-CP», которая будет постфикс для существующего класса. Пример. Hello # example.hello -dname = world # run -java org.junit.runner.junitcore exmple.hellotest -cp "c: /apps/lib/junit4.8.2/*" ## Создан: Zemian Deng 03/ 09/2012 # этот сценарий запуска d d ir (разрешение на абсолютный путь) script_dir = $ (cd $ (dirname $ 0) && pwd) # Этот DIR - где этот скрипт live.app_dir = $ (cd $ script_dir/.. && pd) # Предположим, что приложение DIR находится на один уровень вверх по сценарию dir # parametersjava_home = $ {java_home: =/apps/jdk} # Это домашний каталог java development = $ classpath} # prefix classpath $ classpathrun_java_opts = $ {run_java_opts: =} # java options (-xmx512m -xx: maxpermsize = 128m и т. Д.) Parse: =} # Если Не пусто, пропустите автоматический анализ параметров -d и -cp с script arguments.run_java_no_autocp = $ {run_java_autocp: =} #, если не настройка, не настраивайте java classpathrun_java_dry = $ {run_java_dry: # # # # # # # # # # # not oty. Exec Java Commit, но просто Proprint # OS Специальная поддержка. = javaif [-d "$ java_home"]; #ПРЕДЛАГАЕТСЯ ПРЕДОСТАВЛЕНИЕ WINDOWS JAVA_HOME_WIN = $ (CYGPATH -AW "$ JAVA_HOME") APP_DIR_WIN = $ (CYGPATH -AW "$ APP_DIR") IF [D "$ APP_DIR_WIN/config"]; /config "; fi if [-d" $ app_dir_win/target/test -class "]; тогда Run_java_cp =" $ run_java_cp; класс "]; run_java_cp =" $ run_java_cp; "]; Тогда RUN_JAVA_CP =" $ RUN_JAVA_CP; ; -Classes "; fi if [-d" $ app_dir/target/classe "]; затем run_java_cp =" $ run_java_cp: $ app_dir/target/class "; run_java_cp =" $ run_java_cp: $ app_dir/target/*" ; Экспорт RUN_JAVA_CP и RUN_JAVA_OPTS# EY может пройти в конце этого сценария Run-Java. Idx = 0 # parse все аргументы и ищите "-cp" и "для arg in" $@ "; do if [[-n $ found_cp]]; тогда if [" $ os "=" windows_nt "]; затем # Не могу использовать CygPath, потому что CygPath будет автоматически расширять "*", который мы не хотим. $ arg) run_java_cp = "$ run_java_cp; p =" $ run_java_cp: $ arg "fi supd_cp = else case $ arg in '-cp') found_cp = 1; '-d' *) run_java_opts =" $ run_java_opts $ arg "; *) new_args [$ idx] = "$ arg" Lee t idx = $ idx +1 ;; тогда Echo "$ java_cmd" $ run_java_opts -cp "" $ run_java_cp " -Cp "$ run_java_cp" "" "" "" "" "" "" "" "" "" "" "" "$ {new_args [@]}" Fielse # Показать полную команду Java. ] ||. "$ java_cmd" $ run_java_opts -cp "$ run_java_cp" "$@" fifi