# Versionierung



## Gast2 (24. Okt 2011)

Hallo an euch alle. 

Zunächst habe ich mir folgenden Thread (http://www.java-forum.org/java-basics-anfaenger-themen/66703-versionierung-software.html) durchgelesen und das deckt sich mit dem was ich machen will als Versionsnummer. 

Meine Frage ist: 

Wo verwaltet ihr die Nummern? 

Ich habe vor einen Branch/Tag im Subversion für jede inkrementierte Version abzulegen. Soweit klar. Die Frage: Wo steckt die Versionsnummer im Quellcode? 

Packt ihr die in eine externe Datei, in die Klasse welche die Main beinhaltet, sonst wo hin? 

Wie gesagt es geht nicht um die Art der Numerierung oder die Ablage im Subversion sondern lediglich um die Einbindung in die Software selbst. 

Ich bin mal gespannt wie ihr das so macht.


----------



## maki (24. Okt 2011)

> Die Frage: Wo steckt die Versionsnummer im Quellcode?


In der POM  (Dank Maven)

Ansonsten ist die Frage, wie weit man es mit dem Config Management betreiben will.
Beim klassischen ConfigManagement geht es ultimativ darum, dass man weiss was man ausgeliefert hat, also fertige Produkte (Jars, allgemeiner "lagerfähige Baugruppen"), Quellcode ist da nur zweitrangig und hat eher etwas mit Change Management zu tun.
Dafür eignet sich zB. Maven gut, OSGi hat auch dependencyManagenent (aber anders als bei Maven zur Laufzeit).

Bei der einfacheren Variante, was heute (bzw. bevor Systeme mit DependencyManagement aufkamen) meist unter SW CM verstanden reine Versionierung von Quellcode, nur indirekt von dem was ausgeliefert wurde.
Da reicht es dann wenn die Version in den Klassen oder Propertyfiles abgelegt wird.


----------



## TheDarkRose (24. Okt 2011)

kappesf hat gesagt.:


> Ich habe vor einen Branch/Tag im Subversion für jede inkrementierte Version abzulegen. Soweit klar. Die Frage: Wo steckt die Versionsnummer im Quellcode?



Nur Tags für jede Version anlegen. Eigene (Lebenszeitunbeschränkte) Branches eher nur für Major, maximal für Minorreleases


----------



## Gast2 (24. Okt 2011)

TheDarkRose hat gesagt.:


> Nur Tags für jede Version anlegen. Eigene (Lebenszeitunbeschränkte) Branches eher nur für Major, maximal für Minorreleases



Ja ist klar darauf möchte ich auch gar nicht näher eingehen. 

Zum Post davor: 

Genau um das Release Management gehts mir. Ich Verwende aber kein Maven oder ähnliches. 
Wo bringe ich denn nun die Versionsnummer unter? 

Änderungsverfolgung mache ich komplett über unser Subverion System das ist dahingehend etwas aufgebohrt. Es geht wirklich ums reine Release Management. Für normale Änderungen wird bei Release dann eben ein Tag angelegt fertig. 

Bleibt die Frage wo steht die Zahl denn nun ^^


----------



## maki (24. Okt 2011)

> Bleibt die Frage wo steht die Zahl denn nun ^^


zB. im manifest, in einer Propertydatei (welche ausgelen wird und zB. im About dialog angezeigt wird), per Keyword substitution in den einzelnen Quelldateien, in der web.xml, etc. pp.

wenn diese Informationen (Version) nicht automatischv erwerted werden wie bei Maven und OSGi, ist es eigentlich egal


----------



## Gast2 (24. Okt 2011)

maki hat gesagt.:


> wenn diese Informationen (Version) nicht automatischv erwerted werden wie bei Maven und OSGi, ist es eigentlich egal



Was ist denn Best Pratice? (xml, properties, txt,  ...?)

Ich tendiere auch zu einer externen Datei. Dort könnte die aktuelle Version als auch die Versions History abgelegt sein. 

Der Rest der Software greift dann auf die Infos zu. (z.B. About Dialog).


----------



## tfa (24. Okt 2011)

> Was ist denn Best Pratice? (xml, properties, txt, ...?)


Das ist doch praktisch alles gleichwertig. Mach es so, wie es dir gefällt.
Ich habe z.B. eine Property-Datei, in die von Jenkins per Skript die Versionsnummer und das Datum geschrieben werden. Die Property kann ich dann auslesen und in der GUI anzeigen.


----------

