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.
