Manchmal ist es echt unpraktisch viele kleine JAR-Dateien zu haben und man hätte gerne alles in einer großen. Keine Class-Path Probleme mehr, einfaches Deployen und ein Single-Point-Of-Failure.
Mit Maven geht das zum Glück sehr einfach. Spring Boot und Meecrowave haben eigene Plugins mit denen man auch sehr gut arbeiten kann und die dem Beispiel hier vorzuziehen sind.
Ich habe etwas mit State-Management in Java herum experimentiert und mir etwas geschrieben, um den State von Web-Apps (Vue.js, React, AngularJS,..) auf einen Server auszulagern. So dass sich die States und Actions der verschiedenen Clients gegenseitig beeinflussen können (Datenaustausch), aber private Daten wie Tokens trotzdem für die einzelnen Clients isoliert bleiben. Neben den Reducern gibt es noch Facets für die Anpassung der Ausgabe (so etwas wie Getter in Vuex).
Ich wollte dann einmal das Grundsystem (State-Manager, Interfaces, Server + Controller) in einem Mave-Repository ablegen und die konkrete Implementierung der Reducer, Facets und Filter dann sauber getrennt in einem eigenen Projekt haben.
Das Repository sollte einfach bei Github liegen und nicht in eines der öffentlichen und großen mit rein genommen werden, da es ja erstmal ein Proof-Of-Concept für meine Idee zu verteilten Daten ist. Ich habe mich dabei an diesem DZone-Artikel orientiert.
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<!-- .... und noch mehr ..... -->
</dependencies>
</project>
Den Inhalt aus target/mvn-repo/hp-globalstate/hp-globalstate-core/ habe ich dann in ein Github-Projekt gepackt und hochgeladen. Das 2. Projekt kommt dann dieses dann hinzu:
public class Server {
public static void main(String[] args){
GlobalStateServer server = new GlobalStateServer();
List<Reducer> reducers = new ArrayList<>();
reducers.add(new de.hannespries.test.Reducer());
List<FacetFilter> facets = new ArrayList<>();
facets.add(new DefaultFacetFilterByToken(true));
Manchmal komme ich mir alt und unflexibel vor. Ich benutze zum Bauen von allen möglichen Dingen Ant und wenn es um Dependecy-Management geht nutze ich Maven und den Composer.
Diese ganzen neuen und modernen Build-Systeme habe ich war genommen, aber irgendwie habe ich da nicht die Zeit und Energie mich jetzt mit jedem auseinander zu setzen und die Vorteile, Nachteile und Unterschiedene genau zu analysieren. Am Ende soll es ja doch nur das machen, was mein momentanes System schon macht. Gradle sieht sehr schön und übersichtlich auch.. aber selbst Maven sieht in den einfachen Setup übersichtlich und einfach aus.
Wenn ich also mein Shopware-Plugin baue, was bringt es mir mein universales Ant-Script (das ich nur reinkopieren muss bei jedem neuen Plugin) durch etwas "moderneres" zu ersetzen.
Das Ergebnis sieht gleich aus, wird sicher nicht merklich schneller sein und ich muss keine seltsamen/komplexen Dinge über Variablen und so tun, um zum Ziel zu kommen.
Ist das schlecht? Ist es nachvollziehbar? Ich weiß es nicht... aber ich glaube ich sollte mal wieder mich mehr mit neuen Dingen beschäftigen. Einfach mal wieder etwas Forschung, wenigstens um es alles mal gesehen zu haben. Das gilt besonders für Angular >2 auch wenn ich AngularJS weiterhin wirklich toll finde und es mir vollkommen für meine Aufgaben reicht (und ich es ExtJS wohl immer vorziehen werde, wo es nur geht.) .. und Symfony 4 steht auch noch auf meiner Liste.
Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?