In vielen Java -Projekten wird häufig festgestellt, dass benutzerdefinierte Parameter mit dem Java -Befehlspaket -Shell -Skript aufrufen. Zum Beispiel,
$ Ant_home/bin/mus, $ Groovy_Home/bin/Groovy
Sogar in unserem Timemachine -Scheduler -Programm ist zu sehen
$ etmaachine_home/bin/planler.sh
Es ist langweilig und einfach, diese Verpackungsskripte zu erstellen. Die meisten Probleme kommen aus der Einstellung des richtigen Klassenpfads für das Programm. Wenn Sie interne Projekte für ein Unternehmen entwickeln, können Sie sich vom verworrenen Pfad und dem Umwelt variablen Problem fernhalten. Für Open -Source -Projekte müssen die Menschen jedoch die Verpackung flexibler und universeller gestalten. Die meisten .Bat -Versionen wurden bereitgestellt. Windows DOS ist in der Tat ein brutales und eingeschränktes Terminal, ohne die Bedürfnisse Ihres Projektskripts zu erfüllen. Daher ermutige ich andere oft, Cygwi so weit wie möglich zu verwenden. Zumindest hat es eine echte Bash -Hülle. Weitere häufige Probleme sind, dass diese Verpackungen bald die Kontrolle verlieren und viele redundante Skripte in Ihrem Projekt erscheinen.
Run-Java-Verpackungsskript Einführung
Wenn Sie den Code von $ Timemachine_Home/bin/planuler.sh sehen, werden Sie feststellen, dass er tatsächlich das Run-Java-Skript im selben Verzeichnis bezeichnet wird.
Dir = $ (DirName $ 0) ender_home = $ dire/run -java -dScheduler.home = "$ pleduler_home" Timemachine.tool.tool.dulerServer "" $@"
Wie Sie sehen können, kann unser Run -Java die Option -D verwenden, nicht nur das, es kann auch die Option -CP verwenden! Darüber hinaus können Sie diese Optionen hinter der Hauptklasse angeben! Dies kann Run-Java-Packungen von anderen Skripten verpackt und weiterhin zusätzliche Systemattribute und Klassenpfad hinzufügen.
Zum Beispiel wird Timemachine mit der groovigen Bibliothek geliefert, sodass Sie sie einfach so nennen können
Groovy: $ Timemachine_Home/bin/run-Java Groovy.Groovymain Test.Groovy, Ohne die gesamte Filiale wieder herunterzuladen.
Sie können es problemlos in jedem Verzeichnis verwenden, es bestätigt sein Verzeichnis und laden dann jedes JAR -Paket automatisch im Lib -Verzeichnis. Wenn Sie nun mehr Jar -Taschen zum Ausführen von Groovy hinzufügen möchten, können Sie die Option -CP wie folgt verwenden: CP -Optionen:
$ Timemachine_Home/bin/run-java -cp "$ home/apps/my-App/lib/*" Groovy.Groovymain test.groovyWenn Sie den Java-Klassenpfad einrichten, verursachen Sie normalerweise häufig Fehler, wenn Sie nicht vorsichtig sind, aber Sie können es im Voraus mit Run-Java ausführen:
Run_java_dry = 1 $ $ Timemachine_home/bin/run-java -cp "$ home/apps/my-App/lib/*" Groovy.GroovyMain test.groovy
Sie müssen nur den obigen Zeilencode in der Eingabeaufforderung -Zeile ausführen. Es wird die Java -Befehle aller Optionen und Parameter mit einer vollständigen Ausgabe ausgegeben.
Run-script enthält auch viele andere Optionen, und Sie können es verstehen, indem Sie seine Annotation anzeigen. Das aktuelle Skript kann in jedem Linux -Bash und Windows Cygwin ausgeführt werden.
Verwenden Sie Run-Java durch Maven in der Entwicklung
Nach dem oben genannten Beispiel lautet unter der Annahme, dass die Projektfreigabestruktur wie folgt ist:
$ Timemachine_Home +-Bin/Run-Java +-Lib/*
Aber was ist das Verzeichnis während des Entwicklungsprozesses? Ein allgemeiner Fall ist: Sie möchten den neuesten kompilierten Code unter Ziel/Klassen ausführen, anstatt das gesamte Projekt zu packen oder zu veröffentlichen. Sie können in diesem Fall auch Run-Java verwenden. Fügen Sie zunächst Bin/Run-Java zu Ihrem Projekt hinzu und rennen Sie dann
MVN Compile-Abhängigkeit: Kopieabhängigkeiten
Alle JAR -Dateien werden unter Ziel/Abhängigkeit generiert. Sie müssen dies nur tun. Run-Java erkennt dieses Verzeichnis automatisch und erstellt den richtigen Klassenpfad für Ihre Hauptklasse.
Wenn Sie Eclipse zur Entwicklung verwenden, wird Ihr Ziel-/Klassenverzeichnis immer aktualisiert, und Run-Java kann zu einem Schatz in Ihrer Projektentwicklung werden.
Holen Sie sich Run-Java-Verpackungsskript
#!/Usr/bin/env bash ## Copyright 2012 Zemian Deng ## lizenziert unter der Apache -Lizenz, Version 2.0 (die "Lizenz");# Sie verwenden diese Datei möglicherweise nicht in Einklang mit dem Livense.# Sie erhalten eine Kopie der Lizenz unter ## http://www.apache.org/licenses/2.0##, es sei denn Ohne Gewährleistung oder Bedingungen jeglicher Art, entweder ausdrücken oder impliziert.# Siehe die Lizenz für die spezifischen Sprachberechtigungen und# Begrenzung in der Lizenz.# Ein Wrapper -Skript, das eine JAVA6 -Anwendung in Unix/Cygwin Env ausführt Es wird angenommen, dass sich das "Bin" -Verzeichnis einer Anwendung befindet. Anywhere im Dateisystem und es verweist weiterhin dieses Anwendungsverzeichnis. Ziel-/Testklassen ",#" Ziel/Klassen "und" Ziel/Abhängigkeit "h. Dies kann durch# Einstellung run_java_no_parse = 1 ## deaktiviert werden, wenn die Standard-Parameter" Standard-Parameter " Von allen Pfad sollte# in Cygwin/Unix -Pfad sein, und dieses Skript wird den Windows -Pfad automatisch konvertieren, wo der Benutzer den Java -Klassenpfad anpassen kann. -cp "Option, die nach vorhandenen Klassenpfad postfix wird. ## Verwendung:# run-java [java_opts] <java_main_class> [-cp /more /classPath] [-DSYSPROP = value] ## Beispiel:# Run-Java-Beispiel. Hallo # Beispiel. 2012 # Dieses Run -Skript d d ir (Resolve to Absolute Path) script_dir = $ (CD $ (DirName $ 0) && PWD) # In diesem Dire ist dieses Skript live.app_dir = $ (CD $ script_dir/.. && pd) # Annahme Die Anwendungs -Dire ist eine Ebene von Skript -Dir # Standardparameterjava_home = $ {java_home: =/apps/jdk} # Dies ist das Home -Verzeichnis von Java Development = $ classPath} # Ein Klassenpfad -Präfix vor -classPath -Option, Default zu $ classStrun_java_opts = $ {Run_java_opts: =} # Java -Optionen (-xmx512m -xx: maxpermsize = 128m usw.) run_java_debug = $ {run_java_debug: =} # Wenn nicht leer, drucken Sie die volle java -Befehlslinie aus. : =} # Wenn nicht leer, überspringen Sie die automatische Analyse von -D- und -CP -Optionen aus Skriptargumenten.run_java_no_autocp = $ {run_java_autocp: =} # Wenn noty, nicht auto setup java classpathrun_java_dry = {{{{{{{{{{{{{{{{{ Nicht leer, nicht ausführen Java Commit, sondern nur Proprint # OS Sonderunterstützung. Ist die java ausführbare isjava_cmd = javaif [-d "$ java_home"]; Wenn $ cygwin; $ Run_java_cp; $ App_dir_win/target/class "]; dann run_java_cp =" $ run_java_cp; "$ app_dir_win/lib"]; test -class "]; -Classes"; /Abhängigkeit/*"; fi if [-d" $ app_dir/lib "]; dann run_java_cp =" $ run_java_cp: $ app_dir/lib/*"; D" Nach der Java-Hauptklasse aus Skriptargumenten# Dies ist für bequem Sake So werden die Benutzer nicht exportieren run_java_cp und run_java_opts# EY können stattdessen in das Ende dieses Run-Java-Skripts geleitet werden. = Declare -a new_args idx = 0 # analysieren Sie alle Argumente und suchen "]; Dann kann # CygPath hier nicht verwenden, da CygPath automatisch"*"erweitert wird, was wir nicht wollen. Cygpath -w -a $ arg) run_java_cp = "$ run_java_cp; p =" $ run_java_cp: $ arg "fi found_cp = sonst case $ arg in '-cp') found_cp = 1; '-d' *) run_java_opts =" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" Run_java_opts $ arg "; *) new_args [$ idx] =" $ arg "Lee t idx = $ idx +1 ;; esac fi erledigt # Full Java-Befehl anzeigen. Wenn [-n" $ run_java_debug "] || [-n "$ Run_java_dry"]; $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" "" "" "" "" "" "" "" "" "" "" "" $ {new_args [@]} "fielse # full java -Befehl anzeigen. n "$ run_java_debug"] || [-n "$ run_java_dry"]; run_java_dry "]; dann" $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" $@"fifi