2013-04-01 17 views
8

Ogni pom.xml hanno:applicazione, inclusi il numero di versione da pom.xml all'applicazione fascio

<groupId>com.vendor</groupId> 
<artifactId>product</artifactId> 
<version>1.0.13.0-dev</version> <!-- THIS FIELD --> 
<packaging>war</packaging> 

version pezzo è utile per gruppo con l'applicazione in modo da l'utente può vedere e segnalarli.

Ma non mi piace la duplicazione del codice e cercare un modo per evitare di mettere file di proprietà con la versione informazioni per VCS (Git/SVN), perché ogni volta che mi imbatto versione che deve impegnarsi in due luoghi (pom.xml e version.properties).

In che modo posso rendere versione proprietà da pom.xml disponibile in modo programmatico nell'applicazione Java?

+1

Si possono avere queste informazioni salvate per manifestare di vaso o file di guerra e poi fare uso di esso nella vostra applicazione. –

+1

Grazie per il suggerimento +1. Attualmente cerco di usare la tecnica da http://stackoverflow.com/questions/7144620/reading-properties-file-from-maven-pom-file – gavenkoa

risposta

5

Date un'occhiata al Maven Resources Plugin. Nel tuo version.properties (dovrebbe essere nella cartella resources), definire una riga come version=${project.version}. Assicurati di attivare il filtro per il plug-in (tutto descritto in dettaglio nel link sopra) e dovresti essere pronto!

solo correre mvn resources:resources (o mvn compile) e controllare il file generato.

+0

ho trovato un codice [questo] (http://stackoverflow.com/questions/2712970/get-maven-artifact-version-at-runtime) che non modifica la configurazione di Maven. – Wendel

2

Si può semplicemente configurare il maven-war-plugin, maven-jar-plugin, maven-ear-plugin come la seguente:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>${maven-war-plugin.version}</version> 
    <configuration> 
    <archive> 
     <addMavenDescriptor>true</addMavenDescriptor> 
     <index>true</index> 
     <manifest> 
     <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
     <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
     </manifest> 
     <manifestEntries> 
      <artifactId>${project.artifactId}</artifactId> 
      <groupId>${project.groupId}</groupId> 
      <version>${project.version}</version> 
     </manifestEntries> 
    </archive> 
    </configuration> 
</plugin> 

informazioni Lettura da manifest.mf can be done using jacabi.

+0

Grazie! +1 Uso l'approccio di risorsa come già disponibile con Spring '@ Value' per un file' .property'. – gavenkoa

6

Il mio personale produzione soluzione qui di seguito.

pom.xml:

<?xml version="1.0" encoding="utf-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <version>1.0.13.0-dev</version> 

    <build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
    ... 

base.jsp:

<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
    <a href='<c:url value="/"/>'> 
    <spring:eval expression="@props.getProperty('version')"/> 
    </a> 
    <jsp:include page="${contentPage}" /> 
</body> 
</html> 

proj.properties:

version=${project.version} 

applicationContext.xml:

<bean id="props" class="org.springframework.beans.factory.config.PropertiesFactoryBean" autowire="byName" > 
    <property name="location" value="classpath:proj.properties"/> 
</bean> 

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:proj.properties"/> 
</bean> 

o semplicemente

<util:properties id="props" location="classpath:proj.properties"/> 
+0

@Atharva Grazie per la modifica !! – gavenkoa

5

trovato una soluzione per utilizzare il maven-war-plugin di essere più elegante.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
     <webResources> 
      <resource> 
       <targetPath>WEB-INF/views/jsp</targetPath> 
       <directory>${basedir}/src/main/webapp/WEB-INF/views/jsp</directory> 
       <includes> 
        <include>footer.jsp</include> 
       </includes> 
       <filtering>true</filtering> 
      </resource> 
     </webResources> 
    </configuration> 
</plugin> 

footer.jsp poi ha avuto:

Application Version: ${project.version} 
+0

Bello! Invece di valutare questo da file di risorse solo in linea nei file JSP! +1 – gavenkoa

Problemi correlati