10 Gründe warum Nutzer eine Bill of Materials (SBOM) brauchen

Seit ein paar Wochen gibt es die neue Version 2.7.11 von CycloneDX. Wenn das nicht nicht ein Grund ist, einen neue SBOM zu erzeugen. Eine Software Bill of Materials (SBOM) ist eine Liste der Bestandteile und Komponenten einer Softwareanwendung sowie ihrer Beziehungen zueinander. Hier hatte ich ja schon mal beschrieben wie man mit Maven und dem CycloneDX Plugin eine erzeugt. Hier sind die 10 wichtigsten Gründe, warum Benutzer eine SBOM benötigen:

„10 Gründe warum Nutzer eine Bill of Materials (SBOM) brauchen“ weiterlesen

Wie kann eine Datei-Liste aller Maven Abhängigkeiten eines Projektes erstellt werden?

Manchmal will man eine Liste aller Abhängigkeite eines Maven-Projektes in einer eigenen Datei.

Das geht einfach mit dem maven-dependency-plugin.

Die effiziente Verwaltung von Abhängigkeiten ist ein grundlegendes Element bei der Entwicklung von Java-Projekten. Maven ist ein weit verbreitetes Build-Management-Tool, das Entwicklern ermöglicht, Abhängigkeiten zu verwalten und den Build-Prozess zu automatisieren. Das Maven-Dependency-Plugin ist eine Erweiterung von Maven, die speziell für die Handhabung von Abhängigkeiten entwickelt wurde.

Also einfach das Plugin in der pom.xml einbinden z.B.: „Wie kann eine Datei-Liste aller Maven Abhängigkeiten eines Projektes erstellt werden?“ weiterlesen

Software Bill of Materials (SBOM) mit CycloneDX Maven Plugin leicht erzeugen

In einer zunehmend vernetzten und digitalisierten Welt sind Softwarekomponenten und -anwendungen allgegenwärtig. Unternehmen verlassen sich auf komplexe Softwarelösungen, um ihre Geschäftsprozesse zu unterstützen und innovative Produkte und Dienstleistungen anzubieten. Angesichts der wachsenden Bedrohungen durch Sicherheitslücken und Compliance-Anforderungen wird die Transparenz über die verwendeten Softwarekomponenten immer wichtiger. Hier kommt die Software Bill of Materials (SBOM) ins Spiel, die eine detaillierte und strukturierte Auflistung aller Softwarekomponenten eines Projekts bietet. Vor einem Jahr hatte ich schon mal davon berichtet. In diesem Artikel werden die Vorteile einer SBOM genauer betrachtet.

Transparenz über Softwarekomponenten:
Eine SBOM ermöglicht eine umfassende Transparenz über die verwendeten Softwarekomponenten in einem Projekt. Sie listet alle Komponenten auf, einschließlich Open-Source-Software, Drittanbieterbibliotheken und proprietäre Codebasis. Dies schafft Klarheit über den Ursprung und die Lizenzierung der Software, was für die Einhaltung von Compliance-Anforderungen und die Vermeidung von rechtlichen Problemen von entscheidender Bedeutung ist.
„Software Bill of Materials (SBOM) mit CycloneDX Maven Plugin leicht erzeugen“ weiterlesen

Einfaches generieren von Software Bill of Materials (SBOM) mit Maven CycloneDX Plugin

SBOM (Software Bill of Materials) ist eine Inventar Liste einer Codebasis (hier im Beispiel Java), einschließlich aller identifizierbaren Komponenten samt ihrer Lizenz- und Versionsinformationen sowie Angaben zu eventuell vorhandenen Sicherheitslücken.
SBOM soll helfen, den Softwarecode samt bekannter Bugs und lizenzrechtlicher Fallstricke in der Codebasis zu inventarisieren, um so Risiken auszumerzen.

Diese SBOM Listen im Json oder XML Format können leicht mit dem Maven Plugin CycloneDX erzeugt werden.

Das Plugin kann in der pom.xml an die Package-Phase wie folgt mit den default Werten angekoppelt werden:

Hier die erzeugten Beispiel SBOM für das TWBibel Projekt im XML Format (entfernt).

Und im JSON Format:

„Einfaches generieren von Software Bill of Materials (SBOM) mit Maven CycloneDX Plugin“ weiterlesen

Vergleich GraalVM nativ vs. herkömmlich mit Quarkus auf MacOS

Heute mal ein Vergleich mit einem Beispiel-Quarkus-REST Service normal vs. nativ.

Um die Größe und die Buildzeit zu vergleichen. Hier das Ergebnis vorweg:

Also native gebaute Apps sind wesentlich länger zur Buildzeit dafür laufen sie aber auch wesentlich schneller und sind dann auch auf das jeweilige Betriebssystem beschränkt.


Um auf einen MacOs Quarkus auch nativ zu kompilieren muss die GraalVM und das Native-Image installiert sein.

Also installieren wir die GraalVM auf dem Mac mit Port: „Vergleich GraalVM nativ vs. herkömmlich mit Quarkus auf MacOS“ weiterlesen

TWRestMindmap mit React, Patternfly, RESTEasy, Swagger-UI, Quarkus, Panache, ORM, JPA, Hibernate, Docker und PostgreSQL

TWRestMindmap mit React, Patternfly, RESTEasy, Swagger-UI, Quarkus, Panache, ORM, JPA, Hibernate, Docker und PostgreSQL DB verwenden. Um nicht JUnit 5 zu vergessen.

Wir bauen nun mit Quarkus eine React Anwendung die Titel und das Datum von Mindmaps anzeigt und per REST bedient werden kann. Die GUI im Browser sieht dann so aus: „TWRestMindmap mit React, Patternfly, RESTEasy, Swagger-UI, Quarkus, Panache, ORM, JPA, Hibernate, Docker und PostgreSQL“ weiterlesen

Smart-Contract Wrapper für Java mit web3j-maven-plugin erstellen


Es muss ja nicht immer remix sein, um ein Smart-Contract zu compilieren. Es geht auch wie oben dargestellt mit einem Maven-Plugin (oder Gradle) um mit Ethereum-Netzwerk zu interagieren. Also wie können Solidity Smart Contracts kompiliert und dafür eine Java-Wrapper-Klassen dafür generiert werden?

Wir nehmen als Beispiel mein bekannter Smart-Contract Gehirn.sol der den IQ auf der Blockchain festhalten kann und mit Solidity programmiert ist und speichern in in dem src/main/resources Verzeichnis.

Das Plugin wird mit mvn web3j:generate-sources gestartet und wie folgt in der pom.xml eingebunden: „Smart-Contract Wrapper für Java mit web3j-maven-plugin erstellen“ weiterlesen

de.wenzlaff.command.maven.plugin: Neue Version auf Maven Central für Java 11 veröffentlicht und das bei BTC >60k$ (Block 705403)

Das Maven Plugin zum ausführen von Linux Befehlen wurde nun auf Java 11 umgestellt und die Version nach Maven Central hochgeladen.

Wie hier beschrieben noch ein Quicktest mit der neuen Version und ein ls:

Ergebnis, sieht gut aus: „de.wenzlaff.command.maven.plugin: Neue Version auf Maven Central für Java 11 veröffentlicht und das bei BTC >60k$ (Block 705403)“ weiterlesen

TWHackSSH 1.0.5 nun auch auf Maven Central

TWHackSSH ist nun auch auf Maven Central erhältlich. Lange dort nichts mehr hochgeladen. Die habe jetzt auch eine schöne Übersichtsseite aller Abhängigkeiten mit Scann und mit E-Mail Benachrichtigung:

Jetzt geht der Download also auch darüber, wer das TWHackSSH haben will, kann über

https://search.maven.org/remotecontent?filepath=de/wenzlaff/twhackssh/de.wenzlaff.twhackssh/1.0.5/

gehen oder von diese Seite das Programm laden … „TWHackSSH 1.0.5 nun auch auf Maven Central“ weiterlesen

ArchUnit gestern in Version 0.18.0 veröffentlicht oder wie validiere ich die Architektur am Beispiel einer Blockchain

Gestern wurde ArchUnit in Version 0.18.0 veröffentlicht.

ArchUnit

Wenn das keine Grund ist mal zu zeigen, wie man eine Package-Abhängigkeit überprüfen kann.
Also wir wollen einen Test schreiben, der durchläuft wenn nur aus dem Package blockchain auf das Package be zugegriffen wird. Wie hier im UML Diagramm gezeigt:… „ArchUnit gestern in Version 0.18.0 veröffentlicht oder wie validiere ich die Architektur am Beispiel einer Blockchain“ weiterlesen

Blockchain in Java – Bitcoin heute Neues Allzeithoch – Nasdaq: Börsengang von Coinbase

Wollte heute mal noch vor dem Börsengang von Coinbase ein Blockchain in Java coden. Mit nur zwei Klassen sind die Grundlagen implementiert. D.h. ein Block verweist jeweils auf den nächsten Block. Jeder Block hat einen Hash über die Daten und kann so von jedem validiert werden. Ein Block kann alles enthalten, hier mal ein String Objekt, es muss ja nicht immer Bitcoin sein. Hier die Architektur:

Ein JUnit 5 Testklasse erzeugt eine gültige Blockchain mit 5 Blöcken und wird anschließend validiert. Bei Bitcoin werden alle 10 Minuten neue Blöcke erzeugt. Die haben dann jeweils (ursprünglich) eine Größe von ca. max 1 MB an Daten.

Dann im zweiten Testfall wird ein Block verändert und in die Blockhain eingefügt. Das Ergebnis der validierung muss dann einen Error ausgeben.

Ein Block sieht so aus: „Blockchain in Java – Bitcoin heute Neues Allzeithoch – Nasdaq: Börsengang von Coinbase“ weiterlesen

Mal was anderes als Schnee und Glatteis: Salzen mit SHA-256 in Java

hash, bitcoin,

Kryptografische Hashfunktionen können zur Integritätsprüfung verwendet werden, um Änderungen in Daten festzustellen. Bitcoin verwendet kryptografische Hashfunktionen sehr ausgiebig, um zu überprüfen, dass sich Daten nicht geändert haben. Zum Beispiel wird immer ab und zu – durchschnittlich alle 10 Minuten – ein neuer Hash der gesamten Zahlungsgeschichte erzeugt. Wenn jemand versucht, diese Daten zu ändern, wird dies sofort von jedem, der die Hashes überprüft, bemerkt.

Grundlegenden Eigenschaften von Hash:

-Gleiche Eingabedaten erzeugen den gleichen Hash.
-Leicht unterschiedliche Eingabedaten erzeugen sehr unterschiedliche Hashes.
-Der Hash hat stets eine feste Länge. Bei SHA256 sind dies 256 Bits.
-Die Holzhammermethode Trial-and-Error ist der einzige bekannte Weg, einen Input zu finden, der einen bestimmten Hash erzeugt.

Hier mal ein kleines Java Beispiel mit unterschiedlichen Libs und pur Java: … „Mal was anderes als Schnee und Glatteis: Salzen mit SHA-256 in Java“ weiterlesen

Vaadin Anwendung auf dem Raspberry Pi 4 B in 10 Minuten mit Jetty-Server und Archetype erstellen als Vorbereitung für den richtiger Lockdown ab Mittwoch!

Eine kleine Demo zeigt, dass es gar nicht so kompliziert ist, ein professionelles Web-Application-Framework auf dem Raspberry Pi zum Laufen zu bekommen. Und das in 10 Minuten! Ok, dann los.
webpack und vaadin
Eine vaadin Anwendung Version 16.0.0 und Jetty Server 9.4.15 in 10 Minuten erstellen. Das ist mit dem Archetype möglich. Als Version wird latest angegeben. Diesen Aufruf auf der Kommandozeile in einem leeren Verzeichnis aufrufen:

Das ist beim 2. Mal in 10 Sekunden erledigt. Beim 1. Mal müssen noch die Maven Artefakte ins lokale Repo geladen werden, das dauert etwas. „Vaadin Anwendung auf dem Raspberry Pi 4 B in 10 Minuten mit Jetty-Server und Archetype erstellen als Vorbereitung für den richtiger Lockdown ab Mittwoch!“ weiterlesen

Mal was anderes als COVID-19 Impfstoff BNT162b2: Maven install auf einem Raspberry Pi 4 B mit Beispielprojekt in 10 Minuten mit Archetype

Auf dem Rasberry Pi 4 ist ja default Java 11 installiert. Nun wollen wir mal schnell ein kleines Java Projekt mit Maven erstellen. Da ist schnell gemacht mit Archetype vom Maven.
Danke Dr.Kleinhirn.eu für die Bereitstellung der Mindmap

Also nur noch Maven 3.6.0 installieren mit: sudo apt-get install maven

Dann checken ob alles richtig installiert ist mit: mvn -version

Dann in einem leeren Verzeichnis „Mal was anderes als COVID-19 Impfstoff BNT162b2: Maven install auf einem Raspberry Pi 4 B mit Beispielprojekt in 10 Minuten mit Archetype“ weiterlesen

Docker Container mit REST Service in 5 min mit CO2-Ampel Service erstellen

Wer noch 5 Minuten hat, kann das Beispielprojekt mit der CO2-Ampel auch gleich in einem Docker Container laufen lassen. Vorraussetzung Docker läuft und das Beispielprojekt wurde installiert.

Dann sind, dank der automatisch generierten Docker-Files nur diese 3 Schritte im Verzeichnis der root pom nötig:

Schon läuft der CO2 Service http://localhost:8080/v1/rest/co2 und CO2-Ampel über http://localhost:8080/v1/rest/co2ampel

Cool. Und hier das Dockerfile … „Docker Container mit REST Service in 5 min mit CO2-Ampel Service erstellen“ weiterlesen

REST Service in 15 min mit Quarkus, OpenAPI, Swagger UI und JUnit-Test erstellen und um CO2-Ampel Service erweitern

Einen REST Service in 15 min mit Quarkus, OpenAPI, Swagger UI und JUnit-Test erstellen und um CO2-Ampel Service erweitern ist nicht kompliziert.

Freut euch immer

Vorraussetzungen Java 11 und Maven. Test mit:

mvn -version

auf der Kommandozeile:

Dann fangen wir in einem leeren Verzeichnis an

jetzt rufen wir mit dem Maven Quarkus Plugin das create Goal auf:

Zwei Sekunden später, ist das Projekt angelegt: „REST Service in 15 min mit Quarkus, OpenAPI, Swagger UI und JUnit-Test erstellen und um CO2-Ampel Service erweitern“ weiterlesen

Weil heute Sonntag ist: Java CO2 MQTT Client

Weil heute Sonntag ist. „Freut euch immer„! Nun ein kleiner Java CO2 MQTT Client um auch auf allen Betriebssystemen mit Java die CO2 Daten zu empfangen. Nicht nur für den Raspberry Pi auch Mac und Windows (ungetestet;-)).

Das selbstausführende JAR laden (siehe unten) und starten mit:

java -jar TWCo2Monitor-0.0.1-SNAPSHOT-jar-with-dependencies.jar [PI-Rechner Name/Adresse]

Hier mal eine Ausgabe auf einem Raspberry Pi W Zero:

Der MQTT Client besteht nur aus ein paar Zeilen Java Code: „Weil heute Sonntag ist: Java CO2 MQTT Client“ weiterlesen

Beispiel Verwendung des Maven Plugin: de.wenzlaff.command.maven.plugin

Vor einiger Zeit hatte ich hier mal beschrieben, wie ein einfaches Maven-Plugin erstellt werden kann, dass alle Kommandozeilen Parameter im Log ausgibt z.B. ls, ps, ls -la. So können im Build-Prozess Verzeichnisse oder Prozesse überwacht werden.

Wer aber nur das Kommandozeilen Plugin nutzen will, kann dieses mit ein paar Zeilen in der pom.xml tun, da das Plugin auf Maven-Central frei verfügbar ist.

Squirrel (Sciurus vulgaris) in der 3.Etage am 15.01.2020

Einfach die pom.xml um folgende Zeilen ergänzen: „Beispiel Verwendung des Maven Plugin: de.wenzlaff.command.maven.plugin“ weiterlesen

„Maven Command Plugin“ nun in Version 0.0.1 auf MavenCentral verfügbar

Das „Maven Command Plugin“ ist nun in Version 0.0.1 auf MavenCentral hochgeladen und verfügbar.

Über diese Koordinaten kann das Plugin eingebunden werden:

Und hier ist es zu finden:

Refactoring eines Maven-Plugins mit Dependency Injection

Das hier erstellt Maven-Plugin, kann noch etwas refactored werden mit Nutzung von Dependency Injection.

Always rejoice, mit freundlicher Genehmigung meines Lieblingskünstlers

Die Methode im Mojo kann in eine eigene Klasse CommandProviderApi verschoben werden. Ein neues Interface CommandProvider kann erstellt werden. Die erstellen wir hier:

1. Das Interface: „Refactoring eines Maven-Plugins mit Dependency Injection“ weiterlesen

Ein eigenes Maven-Plugin in 15 Minuten inklusive Dokumentation erstellen

Ein eigenes Maven-Plugin zu erstellen ist nicht schwer und ist schnell gemacht. Wir wollen ein Plugin welches einen Verzeichnis Inhalt mit ls -la in das Log schreibt erstellen. Es können aber auch andere Linux Befehle übergeben werden. Hier nun die 6 Schritte mit den Vorlagen die mind. nötig sind.

Freut euch immer
Always rejoice, mit freundlicher Genehmigung meines Lieblingskünstlers

1. Wir legen in Eclipse ein neue Maven Projekt mit Java 1.8 an. mit Artifact Id und Group Id de.wenzlaff.command.maven.plugin

2. In der pom.xml fügen wir die folgenden Abhängikeiten hinzu: „Ein eigenes Maven-Plugin in 15 Minuten inklusive Dokumentation erstellen“ weiterlesen

In unter 5 Minuten auf einem Raspberry Pi Zero eine Java Quarkus REST Anwendung mit JUnit-Test neu erstellen und starten!

Wenn Java 8 und ein aktuelles Maven auf dem Raspberry Pi installiert ist, kann man in unter 5 Minuten eine komplette REST-Anwendung mit statischer Webseite erstellen und starten. Die dann sogar Hot Reloading fähig ist. Das geht in drei Schritten und das sogar auf einem Raspberry Pi Zero:

Freut euch immer

1. Ein neues leeres Verzeichnis erstellen und dahin wechseln:

2. Mit folgenden Maven Kommando ein Maven Projekt in ca. 30 Sekunden erstellen

3. Das Projekt compilieren und starten in ca. 40 Sekunden mit:

Wenn der Server gestartet ist kann im Browser das Servlet aufgerufen werden mit:

http://[PI-ADRESSE]:8080/info

Ergebnis: hello

4. Nun wollen wir in einem anderen Kommondozeilen-Fenster in das Verzeichnis „In unter 5 Minuten auf einem Raspberry Pi Zero eine Java Quarkus REST Anwendung mit JUnit-Test neu erstellen und starten!“ weiterlesen

Wie kann die aktuellste Maven Version 3.6.2 auf dem Raspberry Pi installiert werden?

Mit einen sudo apt-update oder sudo apt update && sudo apt install maven bekommt man unter stretch nicht die neueste Version sondern nur 3.3.9-4. Aber man kann sie auch von der Binär-Version installieren.

1. Die aktuelle Version von der Maven-Seite holen.

wget http://mirrors.ae-online.de/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz

2. Das Archive entpacken nach /opt

cd /opt && sudo tar -xzvf /home/pi/apache-maven-3.6.2-bin.tar.gz

3. Der Shell für alle User die neue Version mitteilen

sudoedit /etc/profile.d/maven.sh

mit diesem Inhalt

export M2_HOME=/opt/apache-maven-3.6.2
export „PATH=$PATH:$M2_HOME/bin“

Speichern und

4. Die Shell neu starten, damit das Profil-Script ausgeführt wird und die Version checken:

mvn -version

Ok, es wird die neue Version ausgegeben:

Quicktest: Gestern wurde Quarkus 0.24.0 released – „Container First“

Wenn das kein Grund ist mal die neue Version zu testen. Quarkus ist ein relativ neues Framework, welches die leichtgewichtige Entwicklung von Java-Anwendungen nach dem „Container-first“-Prinzip macht. Es wird von Red Hat gesponsert und macht die Entwicklung von Microservices einfacher. Was Entwickler besonders gefällt ist das Live Reloading so das man gemachte Änderungen sofort „sieht“.

Also gleich ein Build it. Save it. Run it. – und das mit Java:

./mvnw compile quarkus:dev

Das klappt ja schon mal, nun ein

./mvnw clean package
Package bauen: „Quicktest: Gestern wurde Quarkus 0.24.0 released – „Container First““ weiterlesen