Java Java Wegweiser gesucht

gaunt

Lt. Commander
Registriert
Aug. 2007
Beiträge
2.016
Hi
vielleicht kann mir mal einer nen kurzen Java Wegweiser geben.

Ich hab vor vielen Jahren mal en bissel was mit Java gemacht, aber nie ganze Projekte. Hab halt einfach stand alone Klassen geschrieben die dann in größeren Projekten verwendet wurden. En bissel mit Android (kleine Apps zum Sensoren testen usw...) hab ich auch schon rummgespielt.
Jetzt muss ich aber. Und Java ist groß;-)

Was will ich tun: Ich bekomme nen Tomcat in dem der Code läuft. Deployen muss ich über die war Files. Im wesentlichen werde ich Backend Sachen machen und kaum was mit dem Frontend. Höchstens mal ne Admin oder Controlling Oberfläche. Also hol Daten von X, mach was damit und übergib das ganze an Y oder schreibs in ein File oder DB. Also eigentlich nix kompliziertes. So Sachen mache ich normal schnell mit PHP, muss jetzt aber auf Java umsteigen, bzw. parrallel nutzen.

Was hab ich schon gemacht: Ich hab mal nen Tomcat installiert mit Eclipse und aktuellem JDK und testweise ein "DynamicWebProjekt" angelegt und ein Servlet hinzugefügt. Soweit läufts... Ist ja auch nicht wirklich kompliziert...

Was suche ich: Ich brauche einen Einstieg!
Servlet, Applet, Spring, Maven... Ich tue mich schwer über google relevantes und sinnloses auseinander zu halten. Zudem gibts eine Mio HelloWorld Beispiele, aber wenig was mich wirklich weiter bringt.
Kann mir mal jemand ein paar Tipps geben wie ich am besten drann gehe?
-Wie setzt man zur Zeit idealerweise die Entwicklungsumgebung auf?
-Brauche ich bei so Kleinkram Build Tools wie Maven, Ant, Gradle?
-Macht es bei kleinen Anwendungen Sinn sich in Frameworks wie Spring einzuarbeiten, oder ist das mehr Overhead als dass es nutzt?
-Gute Tutorials für den Einstieg? Sollten aber auch en bissel was erklären und nicht nur aus "klick hier und da und fertig ist der Gruß an die Welt" bestehen... Die Basics brauche ich! Z.B. wie bekomme ich Get/Post Parameter, wie arbeite ich mit Templates, wie arbeite ich mit Cron Jobs. Spezielle Sachen kann ich mir später dann über die Java Dokumentation holen.
-Sonst noch was?

Wäre cool wenn mal einer ein paar Tipps geben könnte wie ich einen schnellen Einstieg in produktive Java Programmierung hin bekomme.
 
Ich kann dir sagen, mit Spring und Maven machst du nichts falsch! Die Doku von Spring ist recht gut auf deren Homepage. Maven nutzte ich für die java-libraries, so kannst du einfach libraries updaten (siehe mvnrepository). Als Entwicklungsumgebung haben wir IntelliJ eingesetzt, weil es besser mit Maven klar kommt als Eclipse (was ich aber nur gehört habe, selber aber nicht wisse...). Jedenfalls haben wir unsere Videomanagersoftware mit verschiedenen libraries (wie tmdb, vlcj, rottentomatos etc) problemlos erstellen können mit den genannten Tools/Technologien. Hinzu kommt noch das Testen mit JUnit und Spring und JavaFX in Kombination mit Scenebuilder für die Oberfläche. Mit Servlets habe ich auch gearbeitet, war dann aber Teil von Webengineering (kann mich nur noch wage daran erinnern). Wenn du Maven nutzt, brauchst du kein Ant. Mit PHP hab ich noch nie was gemacht.
 
Maven brauchst eigentlich erst wenn dein Projekt Libraries benutzt die nicht jeder hat.
Das ist eigentlich der Sinn der Sache, Maven stellt sicher dass es überall läuft, ohne dass man ewig Zeug installieren muss.

IntelliJ ist nice, aber verbugt. Z.b. sind die Fehlermeldungen nicht chronologisch, sondern willkürlich.
Paar prints oben, darunter ein Fehler und der Error wird in IntelliJ vor den prints gezeigt! Allein deswegen völlig unbrauchbar...
 
Zuletzt bearbeitet:
Mit IntelliJ habe ich mal für Android gearbeitet. Bin jetzt nun wirklich alles andere als ein Experte, aber ich denke wenn man sich eingearbeitet hat geben sich Eclipse und IntelliJ nicht sooo viel. Für PHP nutze ich aber gerne PHPStorm (die PHP optimierte IntelliJ Variante). Finde das ist hier aktuell das angenehmste. Für Java werde ich aber dennoch auf Eclipse setzen, da es hier verbreiteter ist.

Maven stelle ich dann erstmal zurück. Ich denke das was ich vorerst machen werden wird sich wohl auf den Sprachstamm von Java beschränken.

Spring werde ich mir reinziehen wenn ich aufwendigere MVC Projekte machen will. Für Spring bräuchte ich dann aber normalerweise auch Maven oder? Wenn mich nicht alles täuscht ist das Framework ja auch nix anderes als eine Bibliothek die aktuell gehalten werden sollte, oder?

Jetzt nochmal ne ganz dumme Frage! Für das was ich machen will; also im wesentlichen en bissel Backend Kram mit notdürftiger Weboberfläche. Wie nennt sich das was ich dann da baue? Ist das ein Servlet? Da starte ich die Verarbeitung aber normalerweise über einen Webaufruf. In dem kann ich ja Klassen schreiben meinen Backend Krembel erledigen. Aber kann ich hier auch eine Art Konsolenaufruf (z.B. ein Cron aufruf) nutzen? Oder muss ich das trennen?
Also vergleich: In PHP kann ich ein Script schreiben dass sowohl über Web als auch über die Konsole aufgerufen wird. Ist und bleibt aber das selbe Script. Wie macht man das mit einer Java Anwendung? Da habe ich ja normalerweise irgendwo eine static void main() Methode die beim Konsolenaufruf startet. In ner Webanwendung hat man sowas ja normalerweise nicht, oder?!?
 
Maven würde ich freiwillig nicht mehr einsetzen. Zum Glück haben wir schon alle unsere Projekte nach Gradle migriert. Das soll mir mal jemand erklären, wo Maven irgendwas angenehmer macht. Ich finde XML generell furchtbar für jegliche Konfiguration und dann noch das build und dependency management damit zusammenfummeln… no way! Das ist gerade so akzeptabel, wenn man nur die Maven-Lifecycle-Standardkomponenten benutzt, darüber hinaus aber total unflexibel und kommt mir nicht mit Mojos…

Für Java finde ich Eclipse auch vollkommen okay. Das ist aber auch das einzige, wozu Eclipse gut ist. :p

Ich würde Anwendungen heute generell auf Spring Boot aufbauen (da ist der Tomcat embedded) oder mit einem in Docker verpackten Tomcat (aber da hast du wieder eine Baustelle mehr ;) ). Mit Gradle kannst du dir dann trotzdem ein WAR generieren lassen, aber jemand der dein Projekt anfassen muss, ist nicht genötigt, erst einen Tomcat runterzuladen/einzurichten (okay, auch hierfür gibt es eine gute Lösung via Gradle), sondern er führt einfach das Spring Boot JAR aus. Ich sehe eigentlich auch nicht, für was für ein nicht-banales Projekt Gradle zu fett wäre. Libs braucht man quasi immer und wenn es nur apache commons oder guava ist. Und libs gehören nunmal nicht in ein source code repo, denn das verschmutzt die history und bläst folglich die repo size unnötig auf.

Für nicht-banale Webanwendungen schreibt man, meiner Meinung nach, auch nicht händisch Servlets. Weder für REST-Controller (das geht zur Not noch, ist aber unnötig hässlich), noch viel weniger, um markup zu rendern. Für Letzteres gibt es zahlreiche frontend frameworks (nein, ich meine nicht JSPs :freak:).

Wenn du Jobs schedulen willst, schau dir mal Quartz an, bzw. um in der Spring-Welt zu bleiben - Spring Batch.

Mir fällt nicht so recht ein use case ein, wo ich Java-Code einer Webapp von Konsole aufrufen wollen würde, denn immerhin wird da ein fetter application server für hochgefahren. Wenn, dann ginge das über die von dir erwähnten Main-Methoden oder aber du wrapst einen curl-Aufruf o.ä. in ein Shell/Python/you-name-it-Script, was dann einfach einen REST-Controller mit den Parametern befüttert, die du ggf. übergeben willst. An der Stelle solltest du aber durchaus überlegen, ob deine Logik nicht in einer Scriptsprache besser aufgerufen wäre ("pick the right tool for the job").

Am leichtesten lernt es sich wohl, wenn du dir mal Beispielprojekte von Spring (z.B. aus dem Bereich MVC) runterlädst und dir die Funktionsweise ansiehst. Dann selber mal dran rumschrauben und für den eigenen Anwendungsfall anpassen.
 
Mir fällt nicht so recht ein use case ein, wo ich Java-Code einer Webapp von Konsole aufrufen wollen würde...
Eigentlich ist der UC genau anders rumm;-) Der Aufruf erfolgt i.d.R. über die Konsole. Der Cron und alles auf OS Ebene wird aber von einer anderen Abteilung verwaltet. Geht was nicht, kann ich also nicht einfach selber den Aufruf starten, da ich ja nichtmal auf den Server komme, bzw bestenfalls via ftp. Kann ich das Script aber auch über Web starten, kann ich mir sicher sein, dass ich den richtigen Code in der realen Umgebung sehe. Verstehst du was ich meine???

Ich schau mir mal an was hier so genannt wurde. Auf lange Sicht kommt man wohl an Spring nicht vorbei. Und irgendein Build Tool brauchts auch:-( Auf jeden Fall hab ich heute mal ne Kleinigkeit gemacht. Nix wildes. Aufruf einer REST Schnittstelle über nen Proxy mit Basic Authentication und Ausgabe. In PHP sind das vielleicht 5 Zeilen. In Java warnen es bald zwei Bildschirmseiten;-)
...ob deine Logik nicht in einer Scriptsprache besser aufgerufen wäre...
Jupp, ist tatsächlich oft so. Nur manche Sachen gehen eben mit z.B. php nicht. Und da hätte ich dann gerne die Möglichkeit mal auf Java wechseln zu können. Und es schadet ja auch grundsätzlich nicht sich wenigstens ein bisschen damit aus zu kennen.
 
Würde ich ein Script per request ausführen wollen, würde ich wohl entweder mit CGI im Apache rumspielen oder ein Python-Skript mit Flask hinlegen, was den call empfängt und dann einfach einen Konsolenaufruf macht. Nur um noch ein paar Ideen zu nennen. :)
 
Das der Bootstrap Process in Java komplizierter ist, wird sich denk ich auch nie ändern. Das liegt mitunter wohl auch daran, dass mit Vanilla Java nicht viel zu erreichen ist. In der Realität können die meisten Programmierer auch kein richtiges Projektsetup erstellen. Was in der Regel auch kein Problem darstellt.
Die Personen die es können, sind mit dem Standard dingen auch recht schnell. Ich hab immer wo ein paar Setups rumliegen und übernehm nur was ich gerade brauche. Ich hab vor ~1 Jahr mal zwei Blog Posts verfasst mit dem Thema Spring(+web) & Gradle Setup. Ich schick dir die nachher per PM vielleicht sind sie dir ja eine Hilfte.

Bezüglich deines Usecases, ich kann ihn nicht nachvollziehen *hmm*. Im Großen und Ganzen ist aber eigentlich egal was du genau zu erledigen hast. Wenn du es mit der Spring Welt nicht lösen kannst würde es mich sehr stark wundern. Falls du aber dabei Hilfe brauchst kannst dich gerne melden.
 
@tumbleweed
Es gibt sicher unmengen an Möglichkeiten das Problem zu lösen. Allerdings gehören mir die Server nicht, was viele Varianten unmöglich macht. Wenn ich vorschlage einen Konsolenaufruf über einen Webaufruf zu starten bekomme ich den Hals umgedreht;-)

Bezüglich deines Usecases, ich kann ihn nicht nachvollziehen *hmm*.
:freak: ist zugegeben auch nicht üblich;-) Und die Option des Webaufrufs ist optional, und sollte im Idealfall eigentlich auch nicht notwendig sein. Es hilft in diesem sehr speziellen Fall nur bei der schnellen Fehlersuche. Denke das können wir hier beenden. Wie gesagt, ist ein eher unüblicher UC. Hab nochmal überlegt. Theoretisch könnte man ja allen wirklich relevanten Code in ein jar packen und als lib einer Konsolen und einer Webanwendung zur Verfügung stellen...

Wenn du es mit der Spring Welt nicht lösen kannst würde es mich sehr stark wundern.
Mich auch;-) Mir fällt kein Grund ein warum man hier Spring nicht nutzen könnte. Es ist vermutlich nur etwas oversized. Kennst du Spring und alle benötigten Komponenten aus dem FF ist der Overhead vermutlich vertretbar. Aber ich muss mich ja erstmal grundlegend in die Java Welt einarbeiten.

Falls du aber dabei Hilfe brauchst kannst dich gerne melden.
Danke für das Angebot. Aber ich befürchte die Basics muss ich mir wohl selber drauf schaffen. Sollte ich aber spezielle Fragen haben würde ich gerne mal drauf zurück kommen. Danke für die Links! Spätestens wenn ich mir wirklich Spring ansschaue werde ich sie mir genauer zu Gemüte führen. Ohne es genau gelesen zu haben finde ichs gut das du zwei Beispiele gegenüber stellst. Einmal minimalistisch als Konsole und mal als Web mit typischen Anwendungen wie Rest und Angular! THX
 
Zurück
Oben