Ausführbare jar-Datei mittels Maven generieren

Für bestimmte Java-Projekte ist es durchaus praktisch als Ergebnis eine jar-Datei inklusive der benötigten Abhängigkeiten zu generieren. So kann das Projekt in Form einer einzelnen Datei unkompliziert ausgeliefert werden. Mittels Maven lässt sich dies relativ einfach bewerkstelligen. Dabei wird eine Basis-POM (pom.xml) benötigt, in welcher das Plugin maven-assembly-plugin konfiguriert wird:

<plugin>
	<artifactId>maven-assembly-plugin</artifactId>
	<version>3.1.0</version>
	<configuration>
		<archive>
			<manifest>
				<mainClass>com.example.webservice.Webservice</mainClass>
			</manifest>
		</archive>
		<descriptorRefs>
			<descriptorRef>jar-with-dependencies</descriptorRef>
		</descriptorRefs>
	</configuration>
</plugin>

Soll nach erfolgter Entwicklung die jar-Datei mit den Abhängigkeiten erzeugt werden, muss das Kommando:

mvn clean compile assembly:single

genutzt werden. Damit das Ganze auch beim gewöhnlichen:

mvn package

funktioniert, muss die pom.xml angepasst werden. Dabei wird zur Plugin-Definition ein executions-Block hinzugefügt, welcher dafür sorgt das dass Ziel single auch während der Phase package ausgeführt wird. Die komplette pom.xml sieht dann wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>webservice</artifactId>
    <version>1.0.0</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.webservice.Webservice</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Alle im dependencies-Block verwendeten Abhängigkeiten, werden somit in die jar-Datei übernommen.

Verbleibende Zeit im Batteriebetrieb anzeigen

Bei batteriebetriebenen Apple-Geräten wie der MacBook-Serie gab es in früheren Versionen des Betriebssystems eine Anzeige der noch verbleibenden Zeit im Batteriebetrieb. Diese war zu sehen wenn das Akkusymbol in der Menüleiste angeklickt wurde. In neueren Versionen von macOS ist diese Angabe leider nicht mehr zu finden.

Die Angabe der verbleibenden Zeit ist verschwunden

Warum diese Angabe entfernt wurde ist unklar; allerdings kann sie anderweitig im System angezeigt werden. Eine Variante ist die Nutzung der Aktivitätsanzeige. In dieser findet sich im Tab Energie im unteren Bereich eine Anzeige der verbleibenden Zeit.

In der Aktivitätsanzeige kann die Angabe der verbleibenden Zeit noch gefunden werden

Neben dem Weg über die Aktivitätsanzeige, kann die verbleibende Zeit alternativ über das Terminal ermittelt werden. Dazu muss dort:

pmset -g batt

eingeben. Anschließend erscheint eine Ausgabe nach dem Schema:

-InternalBattery-0 (id=5331033)	74%; discharging; 2:29 remaining present: true

Die Zahl vor dem remaining gibt hierbei die verbleibende Zeit an.

Nethack im Browser

Nethack, einer der Klassiker des Roguelike, wird im Normalfall im Terminal gespielt. Allerdings hat man nicht zu jeder Zeit ein Terminal in Reichweite. Einfacher ist es den Browser zu starten und BrowserHack zu spielen. Diese Implementation bzw. Portierung von Nethack findet sich unter coolwanglu.github.io/BrowserHack/. Im Gegensatz zum klassischen Nethack auf dem Terminal, werden bei BrowserHack entsprechende Tilesets unterstützt. Dadurch wird es für Einsteiger einfacher, einen Weg in das Spiel zu finden.

Mit BrowserHack kann Nethack im Browser gespielt werden

Der Quelltext von BrowserHack ist auf GitHub zu finden. Lizenziert ist das Ganze unter der NetHack General Public License kurz NGPL, welches eine von der Open Source Initiative zertifizierte freie Lizenz ist.

Alle Snaps unter Ubuntu aktualisieren

Unter Ubuntu gibt es neben klassischen Paketsystem seit einigen Versionen sogenannte Snaps. Bei diesen handelt es sich um Pakete einer weiteren Paketverwaltung mit dem Namen Snappy. Im Gegensatz zum klassischen Paketmanager sind Snap-Pakete in soweit vom System entkoppelt, als das sie ihre Abhängigkeiten mitbringen. Mir stellte sich die Frage wie besagte Snap-Pakete aktualisiert werden können. Mit Hilfe der Terminals und des Befehls:

snap refresh

kann diese Aufgabe schnell erledigt werden. Wird nach dem Parameter refresh noch ein weiterer Parameter angehangen, so wird dieser als Paketname interpretiert und nur dieses Paket aktualisiert. Ebenfalls interessant ist der Befehl:

snap list

welcher alle installierten Snap-Pakete auflistet. Entfernt werden können Snap-Pakete wieder mit dem Kommando snap remove und dem entsprechendem Paketnamen.

Unter macOS alle Dateien eines Verzeichnisses hashen

Für die Überprüfung einiger Dateien unter macOS wollte ich diese mittels SHA1 hashen. Dazu dient das Kommando shasum:

shasum text.txt

Möchte man nun die Hashes aller Dateien eines Verzeichnisses berechnen, so kann man sich folgenden Befehls bedienen:

find . -type f -print0  | xargs -0 shasum

Anschließend erhält man eine Liste der Dateien mit den entsprechenden Hashwerten:

f6b53e378767be11ec05a25bc1be5cd6bd973fc6  ./schema.dxf
d5e5fb854be213410d8f734fee284bb12615349f  ./schema.svg
43ced91a43074bae41b5774bde6e35015ba1ed9c  ./schema.skb
0160e7f2265b51d6c5067a1468aa0cda42bc7e43  ./schema.skp
80b96f10c14b6c9bad809565d4be5c1ddc0c36a1  ./schema1.jpg
b4c9ecdc0cdec4b939049ad5e55164a09c7c6f85  ./schema2.jpg
821b657612029cf127cfb920b1943072ee333e54  ./schema.sh
64d44e1871aaa25cf0a5f34f76979f62be9617d6  ./schema.txt