Mit diesen beiden kleinen Shell-Schnipseln programmiert es sich leichter, wenn man mit Java auf dem Mac arbeitet. Einfach in .bashrc
oder .zshrc
im Home-Verzeichnis des entwickelnden Users einfügen und genießen!
Java-Version auf Kommando umschaltbar
Wenn man abwechselnd für mehrere Projekte programmiert, die unterschiedliche JDK-Versionen haben, dann hilft es, wenn man auf der Command Line ein einfaches Kommando hat, um auf das jeweils richtige JDK umzuschalten.
Hier ein Kommando, um herauszufinden, welche JDKs auf der Maschine sind:
/usr/libexec/java_home -V
Dann ein Schnipsel zum Einfügen in .bashrc
oder .zshrc
:
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}
Shell einmalig neu öffnen. Dann funktioniert z.B. so etwas in Zukunft automatisch:
% jdk 14
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.1+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.1+7, ...)
% jdk 1.8
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, ...)
Dotenv in einer Zeile
Ab und zu müssen Programme mit genau definierten Werten für die Environment-Variablen gestartet werden (z.B. für URLs von Datenbanken oder Codes für AWS Secrets). Bisher machte ich das immer mit einer .env
Datei und einem Tool wie dotenv
oder foreman
.
Das funktionierte bei mir so lange bis die React-Leute ebenfalls anfingen, .env
zu benutzen. Damit war die Datei "verbrannt".
Jetzt fand ich hier eine schöne, kurze Alternative dazu: Man schreibe eine eigene Datei, z.B. .backend-env
und führe das Kommando mit dem Vorsatz de
(wie "dot-env") aus. Das de
Kommando definiert man ebenfalls in .bashrc
oder .zshrc
:
de() { [ -f .backend-env ] && <.backend-env grep -v "^#" | tr '\n' ' ' | xargs -J% env % "$@"; }
Als Beispiel eine Datei .backend-env
:
DATABASE_URL=jdbc:postgresql://localhost:5432/mydb?user=dbuser&password=dbpassword
Dann:
% de ./gradlew run
Connecting to database at DATABASE_URL...
Success!
Titelbild
Danke an die Fotografin @helloimnik