FAM 4.0 - Revision i branca amb GIT
1. Introducció
El projecte FAM, i l'arquetip de projectes Web basat en ell, està configurat per generar el nom del war amb la revision del projecte SVN i incloure aquest numero en un fitxer de propietats que es pot consulta des de l'aplicació a la finestra d'informació de l'entorn.
Si el projecte fa servir GIT, cal modificar alguns arxius per mostrar la revision i la branca correctament.
2. Requisits
Cal instal·lar el client Git de windows i verificar que està al PATH del sistema la ruta <directori d'instal·lació>/git/cmd
3. Modificacions
3.1. Literals
Edita l'arxiu resources/literals/core.properties
i afegeix dos entrades:
Aplicacio.GIT.Branch = Branca Aplicacio.GIT.Revision = GIT revision
3.2. Vista
Edita l'arxiu WebRoot\views\ajuda\infoAplicacio.xhtml.
Elimina la informació de SVN
<tr> <th scope="row">#{literalsCore['Aplicacio.SVN.Title']}</th> <td>#{literalsCore['Aplicacio.SVN.Revision']}</td> </tr>
I afegeix la informació de GIT
<tr>
<th scope="row">#{literalsCore['Aplicacio.GIT.Branch']}</th>
<td>#{applicationBB.gitBranch}</td>
</tr>
<tr>
<th scope="row">#{literalsCore['Aplicacio.GIT.Revision']}</th>
<td>#{applicationBB.gitRevision}</td>
</tr>
3.3. Bean de control
Afegeix a la classe ApplicationBB
el següent codi
import java.util.Properties; import java.io.IOException; private String gitRevision = null; private String gitBranch = null; public String getGitRevision() { if (gitRevision == null) { try { Properties prop = new Properties(); prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("build.properties")); gitRevision = prop.getProperty("revision"); gitBranch = prop.getProperty("branch"); } catch (IOException e) { LOG.error("sense propietats del build.properties", e); } } return gitRevision; } public String getGitBranch() { if (gitBranch == null) { try { Properties prop = new Properties(); prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("build.properties")); gitRevision = prop.getProperty("revision"); gitBranch = prop.getProperty("branch"); } catch (IOException e) { LOG.error("sense propietats del build.properties", e); } } return gitBranch; }
3.4. Configuració
Edita l'arxiu pom.xml i afegeix la següent informació:
SCM del git desprès de les propietats
<scm> <url>https://codifont.diba.es</url> <connection>scm:git:https://codifont.diba.es/CODI_PROJECTE/CODI_PROJECTEgit</connection> <developerConnection>scm:git:https://codifont.diba.es/CODI_PROJECTE/CODI_PROJECTE.git</developerConnection> </scm>
Afegeix la part en negreta al plugin del build que genera el war
<plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <webappDirectory>${basedir}/WebRoot</webappDirectory> <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> <!-- TODO revisar per que excloure config --> <warSourceExcludes>**/.svn/**,**/config/**,filters/**</warSourceExcludes> <!-- release peu --> <nonFilteredFileExtensions> <!-- default value contains jpg,jpeg,gif,bmp,png --> <nonFilteredFileExtension>pdf</nonFilteredFileExtension> <nonFilteredFileExtension>png</nonFilteredFileExtension> <nonFilteredFileExtension>css</nonFilteredFileExtension> <nonFilteredFileExtension>bmp</nonFilteredFileExtension> <nonFilteredFileExtension>jpg</nonFilteredFileExtension> <nonFilteredFileExtension>jpeg</nonFilteredFileExtension> <nonFilteredFileExtension>gif</nonFilteredFileExtension> </nonFilteredFileExtensions> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> <manifestEntries> <Implementation-Branch>${scmBranch}</Implementation-Branch> <Implementation-Build>${buildNumber}</Implementation-Build> </manifestEntries> </archive> </configuration> </plugin>
Afegeix dins del build, desprès del plugin de construcció del war, aquest plugin
<!-- GIT revision --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <id>create</id> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> <execution> <id>metadata</id> <phase>generate-resources</phase> <goals> <goal>create-metadata</goal> </goals> <configuration> <attach>true</attach> <!--make it available for jar/war classpath resource --> <addOutputDirectoryToResources>true</addOutputDirectoryToResources> <properties> <branch>${scmBranch}</branch> </properties> </configuration> </execution> </executions> <configuration> <shortRevisionLength>8</shortRevisionLength> <doCheck>false</doCheck> <doCreate>false</doCreate> </configuration> </plugin>
Modifica el patró del nom a cadascun dels profile segons l'exemple del profile dev:
<finalName>${project.artifactId}-${project.version}-dev-r${svnProperties.revision}${svnProperties.specialStatus}</finalName> per <finalName>${project.artifactId}-${project.version}-dev-r${buildNumber}</finalName>
3.5. Modificacions per projectes FAM3
Pels projectes FAM3 que hagin migrat el repositori de SVN a GIT, les modificacions difereixen en alguns punts.
La configuració del pom és igual que la descrita a l'apartat Configuració. La diferència està en l'apartat Modificacions. Per adaptar aquests projectes només caldrà modificar els següents dos literals del fitxer literalsCore.properties amb aquests valors.
EntornRevisionApp = GIT revision appSvnRevision = ${buildNumber}
No cal fer cap modificació en la vista ni en el backing bean.