1. #1
    Projektleitung
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    4.046
    Thanked 8.448 Times in 2.520 Posts
    Blog Entries
    5

    Beitrag [Paper #3] Saubere Struktur bei der Entwicklung

    Vorwort

    In Teil #3 (http://u-hacks.net/tutorials-90/pape...-heraus-12977/) habe ich gezeigt, wie man den Knuddels-Client aus Java heraus lokal starten kann.
    Damit auch Anfänger hier schnell Erfolge erzielen können, habe ich mich auf das wichtigste beschränkt.
    So ist z.B. die Verzeichnisstruktur zu kurz gekommen.
    Damit es nachher nicht heißt ich würde angehenden Entwicklern empfehlen, auf Übersichtlichkeit zu scheißen und einfach alles in einen Ordner zu knallen, zeige ich euch hier die Grundstruktur eines übersichtlichen Clienten.


    Um dieses Tutorial komplett zu verstehen, ist Grundwissen in Batch erforderlich.

    1. Ordner anlegen

    Wie zuvor legen wir erstmal einen Ordner für alles was mit dem Client zutun hat an. Idealerweise nennen wir diesen Client.

    In diesem Ordner erstellen wir nun einige neue Unterordner:

    src
    src ist die Abkürzung für source bzw sourcecode. In diesen Ordner kommen alle selbst geschriebenen Klassen des Clienten sowie später unsere Manipulator-Klasse.

    lib
    In den lib-Ordner kommen sämtliche libraries, die wir nutzen (Applet, ani-Archiv usw).

    dist
    Der distribute-Ordner enthält nachher unseren fertigen Client, der in dieser Form weitergegeben werden kann (distribute = verteilen).

    Man kann die Ordner natürlich auch anders nennen, wenn man diese Umbenennung(en) später im Tutorial berücksichtigt.
    Die Namen der Ordner sind so gewählt, dass sie möglichst kurz sind, aber dennoch auf ihren Inhalt schließen lassen (sonst könnte man die Ordner auch einfach a, b und c nennen).
    Dies ist für Coder optimal, da coder normal faul sind und daher natürlich nicht jedesmal wenn sie diese Ordner verwenden Romane schreiben möchten.

    2. Dateien in die Ordner verschieben

    Aus obiger Erklärung kann man sich eigentlich schon denken was wo hineingehört, damit es aber auch dem letzten Klar ist hier nochmal die komplette Verzeichnisstruktur:

    Client
    --src
    ----Client.java
    --lib
    ----knuddelsk90amz.jar
    ----ani90amz.jar
    ----netscape
    --dist

    3. Script + Mainfest erstellen

    Da wir das ganze nun etwas sauberer und professioneller angehen wollen, erstellen wir uns getrennte Scripte fürs starten und compilieren.
    Bei dem alten Script wird jedesmal alles compiliert, was natürlich unsinnig ist, wenn man den Client nur starten will.

    Bevor wir ein Script erstellen, erstellen wir erstmal eine sogenannte Mainfest-Datei. Diese Datei gibt Beispielsweise an, welches die Startklasse ist, die beim Doppelklick auf das Jar-Archiv gestartet werden soll.

    Dazu erstellen wir im Ordner Client eine neue Textdatei namens 'mainfest'.
    In dieser Datei legen wir die Startklasse fest:

    Code:
    Main-Class: Client
    Anschließend sollte eine Leerzeile folgen (also einfach 1x Enter drücken) - nun noch abspeichern und fertig.

    Jetzt erstellen wir die Batchdatei, die alles komplett neu kompiliert. Passend dazu nennen wir sie compile.bat.

    Am Anfang der Datei definineren wir einige Variablen:

    Code:
    @set version=90alw
    @set cp=lib\knuddelsk%version%.jar;.
    @set out=Client%version%
    Das @ am Anfang bedeutet, dass der Befehl nicht auf der Konsole ausgegeben wird, was hier nicht notwendig ist und nur die Übersicht stören würde.

    version gibt die Appletversion an. Bei einem Appletupdate müssen wir die Version so nur an dieser einen Stelle ändern und nicht an 10 weiteren.

    cp ist der ClassPool von Java. Hier gehören alle Libs rein die wir nutzen und die Java braucht, um alles fehlerfrei zu kompilieren.
    Im Moment ist das nur das Applet, es werden aber später auf jeden Fall noch weitere dazukommen.

    out ist der Name der Jar-Datei, die später unser fertiger Client im Ordner dist tragen wird.

    Es empfiehlt sich, zuvor compilierte class-Dateien aus dem src-Ordner zu löschen, bevor man sie neu compiliert. Ist nicht zwingend notwendig, aber beugt Fehlern vor:

    Code:
    del src\*.class
    * ist ein regulärer Ausdruck und auch als Joker-Zeichen bekannt. *.class bedeutet einfach alle Dateien mit der Dateiendung .class.

    Nun compilieren wir alle java-Dateien im src-Ordner. Im moment ist das zwar nur eine, das wird sich aber später noch ändern, wenn man sauber objektorientiert programmiert.

    Daher nutzen wir auch hier das Joker-Zeichen und kompilieren alle Java-Dateien auf einen Schlag. Da sich das Knuddels-Applet aus übersichtlichkeitsgründen in einem anderen Ordner befindet, übergeben wir java dies als ClassPool.

    Code:
    javac -cp %cp% src\*.java
    Im Ordner dist legen wir einen neuen Ordner temp an und wechseln in diesen.

    Code:
    cd dist
    mkdir tmp && cd tmp
    Den Ordner brauchen wir, weil nun dasselbe passiert wie in #2: Alles wird in einen Ordner geklatscht.
    Der Unterschied ist nur, dass dies nur für das Jar-Archiv gemacht wird und wir davon nichts mitbekommen. Unsere Dateien sind und bleiben zum coden schön ordentlich in getrennten Ordnern.

    Wir kopieren also erstmal alle compilierten Klassen in unseren Temp-Ordner

    Code:
    xcopy ..\..\src\*.class . /Y
    Dasselbe machen wir mit dem Applet und dem ani-Archiv, das wir allerdings nicht kopieren, sondern in diesen Ordner entpacken

    Code:
    jar xf ..\..\lib\knuddelsk%version%.jar
    jar xf ..\..\lib\ani%version%.jar
    Der netscape-Ordner darf natürlich auch nicht vergesen werden:

    Code:
    md netscape
    xcopy ..\..\lib\netscape\* netscape /S /Y
    Da nun alles beisammen ist, erstellen wir aus dem ganzen Kram ein Jar-Archiv mit der zuvor erstellten Mainfest:

    Code:
    jar cfm ..\..\dist\%out%.jar ..\..\mainfest.txt *
    Und der Client ist fertig, alles in einem automatisch startenden Jar-Archiv drin.

    Natürlich muss jemand den ganzen Dreck, den wir im tmp-Ordner gemacht haben auch wieder aufräumen. Das überlassen wir nicht der imaginären Putzfrau, sondern machen es selbst:

    Code:
    cd ..
    rmdir /S /Q tmp
    An den Schluss würde ich noch ein

    Code:
    pause
    setzen, damit wir im Fehlerfall die Fehlermeldung lesen können und sich das Script nicht schließt.

    Das fertige Script sollte nun so aussehen:

    Spoiler:

    Code:
    @set version=90alw
    @set cp=lib\knuddelsk%version%.jar;.
    @set out=Client%version%
    
    del src\*.class
    javac -cp %cp% src\*.java
    
    cd dist
    mkdir tmp && cd tmp
    
    xcopy ..\..\src\*.class . /Y
    jar xf ..\..\lib\knuddelsk%version%.jar
    jar xf ..\..\lib\ani%version%.jar
    md netscape
    xcopy ..\..\lib\netscape\* netscape /S /Y
    
    jar cfm ..\..\dist\%out%.jar ..\..\mainfest.txt *
    cd ..
    rmdir /S /Q tmp
    
    pause


    Der fertige Client befindet sich im Ordner dist und heißt hier ClientClient90alw.jar.
    Um ihn zu starten ist kein Startscript nötig, es genügt ein Doppelklick auf die jar-Datei.

    Alternativ kann man ihn natürlich auch über eine Batchdatei mit dem Inhalt

    Code:
    java -jar Client90alw.jar
    starten.

    Vorteile:

    Übersichtliche Verzeichnisstruktur
    Client kann einfacher geupdatet werden
    User erhält ein fertiges Jar-Archiv, das per doppelklick startet - keine 99 Sourcefiles die über eine Batch-Datei gestartet werden

    Mehr fällt mir grad nicht ein, sollte aber denke ich reichen, um diese Methode der Chaos-Methode vorzuziehen.


    Das nächste Tutorial zur Manipulation des Clienten wird logischerweise auf diesem Tutorial aufbauen und nicht auf #2.
    Im Anhang befindet sich der gleiche Client aus Paper #2 mit der hier gezeigten überarbeiteten Verzeichnisstruktur.


  2. The Following 7 Users Say Thank You to DMW007 For This Useful Post:

    Comu (01.06.2012), DnL (21.07.2012), Gangstersheep (21.07.2012), Gurke (08.09.2012), iToxic (01.06.2012), Mentos (31.05.2012), Pwned (21.07.2012)

  3. #2
    U-Labs Routinier

    Registriert seit
    18.11.2011
    Beiträge
    457
    Thanked 294 Times in 94 Posts
    Blog Entries
    1

    Standard AW: [Paper #3] Saubere Struktur bei der Entwicklung

    Wann gehts denn hier weiter? Ich würde gerne in die Knuddels-Programmierung per Java einsteigen, weiß aber nicht, wie es hier weiter geht

  4. The Following User Says Thank You to Pwned For This Useful Post:

    Gurke (08.09.2012)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 25.10.2016, 18:59
  2. e107 v2 in Entwicklung
    Von Devon im Forum Web-Applications
    Antworten: 0
    Letzter Beitrag: 17.03.2013, 12:18
  3. [Übersicht] Tutorials zur Knuddels-Entwicklung
    Von DMW007 im Forum Tutorials
    Antworten: 0
    Letzter Beitrag: 31.05.2012, 23:53
  4. Secret Entwicklung
    Von Turbo187 im Forum Fragen & Probleme
    Antworten: 11
    Letzter Beitrag: 10.03.2012, 16:12
  5. Antworten: 0
    Letzter Beitrag: 07.03.2012, 23:31

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191