2013-04-01 9 views
8

Jeder pom.xml haben:einschließlich Anwendungsversionsnummer von pom.xml zu Anwendungspaket

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

version Stück ist zu Haufen mit Anwendung nützlich, damit Benutzer sie sehen und melden.

Aber ich mag nicht Code-Duplizierung und suche nach einer Möglichkeit, mit Versionsinformationen zu VCS (Git/SVN) setzt Eigenschaftendatei zu vermeiden, weil jedes Mal, wenn ich Version stoße ich an zwei Stellen verpflichten müssen (pom.xml und version.properties).

Welchen Weg kann ich machen Version Eigenschaften von pom.xml programmgesteuert in Java-Anwendung?

+1

Sie diese Informationen manifestieren von Glas oder WAR-Datei gespeichert haben und dann nutzen sie in der Anwendung machen. –

+1

Danke für den Vorschlag +1. Derzeit versuche ich Technik von http://stackoverflow.com/questions/7144620/reading-properties-file-from-maven-pom-file – gavenkoa

Antwort

5

Werfen Sie einen Blick auf die Maven Resources Plugin. In Ihrer version.properties (sollte im resources Ordner sein), definieren Sie eine Linie wie version=${project.version}. Stellen Sie sicher, die Filterung für das Plugin zu aktivieren (alles im Detail unter dem obigen Link beschrieben) und Sie sollten gut gehen!

Führen Sie einfach mvn resources:resources (oder mvn compile) und überprüfen Sie die generierte Datei.

+0

zu verwenden Ich fand einen Code [this] (http://stackoverflow.com/questions/2712970/get-maven-artifact-version-at-runtime), dass keine Änderung Maven config. – Wendel

2

Sie können einfach die maven-war-plugin, maven-jar-plugin, maven-ear-plugin wie folgt konfiguriert werden:

<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> 

Lesen von Informationen von manifest.mf can be done using jacabi.

+0

Danke! +1 Ich benutze Ressourcen-Ansatz wie bereits Spring '@ Value' für eine' .property' Datei. – gavenkoa

6

Meine persönliche Produktion unten Lösung.

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> 

oder nur

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

@Atharva Danke für die Bearbeitung! – gavenkoa

5

eine Lösung gefunden, die maven-war-plugin zu verwenden eleganter zu sein.

<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 dann hatte:

Application Version: ${project.version} 
+0

Schön! Anstatt dies aus der Ressourcendatei auszuwerten, wird nur in JSP-Dateien eingebunden. +1 – gavenkoa