2010-10-07 17 views
5

Me gustaría mostrar la versión actualmente en ejecución de mi aplicación web en la página. El proyecto se basa en Maven, Spring y Wicket.Acceso a la versión del proyecto maven en los archivos de configuración de Spring

Me gustaría de alguna manera obtener el valor de maven's ${project.version} y usarlo en mis archivos XML de primavera, de manera similar a la forma en que uso Spring PropertyPlaceholderConfigurer para leer un archivo de propiedad para la configuración que uso en mi aplicación.

Si tuviera el experto project.version disponible como una variable de configuración en mi primavera, lo que podía hacer algo como esto:

<bean id="applicationBean" class="com.mysite.web.WicketApplication"> 
<property name="version"><value>${project.version}</value></property> 
</bean> 

¿Cómo puedo hacer esto?

Respuesta

11

Puede usar Maven filtering como ya se ha sugerido.

O usted podría leer el archivo pom.properties creado por Maven en el directorio META-INF directamente con la primavera:

<util:properties id="pom" 
    location="classpath:META-INF/groupId/artifactId/pom.properties" /> 

y utilizar el grano.

El único inconveniente del último enfoque es que el pom.properties se crea en package tiempo de fase (y no estará allí durante, por ejemplo, test).

+0

yup, esta es la mejor solución (+1) –

+0

excelente enlace, incluye exactamente lo que necesitaba. Muestra cómo incluir y excluir el filtrado de diferentes recursos, a diferencia de la guía de inicio enlazada por @Derek. También gracias por la alternativa, pero el filtrado funciona bien. – Tauren

+0

¿Dónde se supone que debe ir esa línea? – Randell

7

Una técnica sería utilizar filtros de expertos. Puede insertar marcadores de posición en archivos de recursos como los que luego se reemplazan con valores de la construcción durante la fase de recursos.

Buscar "¿Cómo puedo filtrar los archivos de recursos?" en el Maven getting started guide

+0

¡Gracias por la ayuda! – Tauren

0

Implementamos archivos de propiedades fuera de la aplicación web. Los archivos se pueden filtrar en el momento del despliegue.

Si utiliza Jetty, puede colocar el archivo en $ JETTY_HOME/resources o usar la función extraClassPath para cargar el archivo de propiedades en tiempo de ejecución.

1

Utilice la anotación @PropertySource para agregar el archivo pom.properties creado por Maven en el directorio META-INF. Tenga en cuenta que el archivo no existe hasta la fase del paquete . Para evitar errores durante la prueba, configure ignoreResourceNotFound = true y agregue un valor predeterminado en la propiedad que se está leyendo (por ejemplo, ninguno a continuación).  

@Service 
@PropertySource(value = "classpath:META-INF/maven/io.pivotal.poc.tzolov/hawq-rest-server/pom.properties", ignoreResourceNotFound=true) 
public class MyClass { 
    private String applicationPomVersion; 

    @Autowired 
    public MyClass(@Value("${version:none}") String applicationVersion) { 
     this.applicationPomVersion = applicationVersion; 
    } 

    public String getApplicationPomVersion() { 
     return this.applicationPomVersion; 
    } 
} 
Cuestiones relacionadas