001 // Copyright 2007, 2008, 2011 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry5; 016 017 import java.io.BufferedInputStream; 018 import java.io.IOException; 019 import java.io.InputStream; 020 import java.util.Properties; 021 022 /** 023 * Utility methods related to managing framework version numbers. 024 */ 025 public class VersionUtils 026 { 027 028 /** 029 * Reads a version number from a properties file on the classpath. These files are generally created by Gradle. For 030 * example, tapestry-core's properties file is <code>META-INF/gradle/org.apache.tapestry/tapestry-core/pom.properties</code>. 031 * The Gradle generated properties files include the version and possibly others properties. 032 * <p/> 033 * The resource is located using the Thread's context class loader. 034 * 035 * @param resourcePath the complete path to the resource, including a leading slash. 036 * @return the version number read from the properties file, or "UNKNOWN" if the version number is not present or 037 * the file can not be opened 038 */ 039 public static String readVersionNumber(String resourcePath) 040 { 041 String result = "UNKNOWN"; 042 043 InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream( 044 resourcePath); 045 046 047 if (stream != null) 048 { 049 Properties properties = new Properties(); 050 051 052 try 053 { 054 stream = new BufferedInputStream(stream); 055 056 properties.load(stream); 057 } 058 catch (IOException ex) 059 { 060 // Just ignore it. 061 } 062 063 String version = properties.getProperty("version"); 064 065 // Since the file, if it exists, is created by Gradle and will have the key, I can't see 066 // how version would EVER be null, unless there's a problem reading the properties. 067 068 if (version != null) result = version; 069 } 070 071 return result; 072 } 073 }