アットウィキロゴ

manifest

マニフェストファイルにアクセスするサンプル


 package manifest;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
 
 import java.util.jar.Manifest;
 
 public class ManifestLoader {
 
 	public ManifestLoader(){
 	}
 	
 	public List<Manifest> loadManifestFiles(){
 		List<Manifest> retVal = new ArrayList<Manifest>();
 		try{
 			Enumeration<URL> urls = ClassLoader.getSystemClassLoader().getResources("META-INF/MANIFEST.MF");
 			while(urls.hasMoreElements()){
 				URL url = urls.nextElement();
 				InputStream istr = url.openStream();
 				Manifest manifest = new Manifest(istr);
 				retVal.add(manifest);
 			}
 		}catch(IOException e){
 			throw new RuntimeException("",e);
 		}
 		return retVal;
 	}
 	
 }
 package manifest;
 
 import java.util.jar.Attributes;
 
 public class Version {
 
 	public static final String Comment = "Comment";
 	public static final String Specification_Title = "Specification-Title";
 	public static final String Specification_Vendor = "Specification-Vendor";
 	public static final String Specification_Version = "Specification-Version";
 	public static final String Implementation_Title = "Implementation-Title";
 	public static final String Implementation_Version = "Implementation-Version";
 	public static final String Implementation_Vendor = "Implementation-Vendor";
 	public static final String Implementation_URL = "Implementation-URL";
 	
 	private Attributes attributes ;
 	private String name;
 		
 	public Version(Attributes attributes,String name){
 		this.attributes = attributes;
 		this.name = name;
 	}
 	
 	public String getAttribute(String key){
 		return attributes.getValue(key);
 	}
 	
 	public String getName(){
 		return name;
 	}
 	
 	public String getAttributesWithManifestName(String key){
 		try{
 			return "[" + name + "]" + attributes.getValue(key);
 		}catch (RuntimeException e) {
 			// Manifestファイルに対象のキーがたまたま設定されていない場合、IllegalArguementExceptionが発生する。
 			// この場合に、異常終了することは避けたいことから「バージョンが未設定である」胸をあらわす文字列を返却する仕様とする。
 			// なお、捕捉する例外は念のためにRuntimeExceptionとしてキャッチし、想定外のエラーが発生した場合にも
 			// 当関数内で握りつぶす仕様とする。
 			return "バージョンが未設定です";
 		}
 	}
 }
 package manifest;
 
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 import java.util.regex.Pattern;
 
 public class VersionCrator {
 
 	public Map<String,Version> createVersion(){
 		return createVersion(".*");
 	}
 
 	public Map<String,Version> createVersion(String pattern){
 		Map<String,Version> retVal = new HashMap<String,Version>();
 		
 		ManifestLoader loader = new ManifestLoader();
 		List<Manifest> manifestList = loader.loadManifestFiles();
 
 		for (Manifest manifest : manifestList) {
 			Map<String,Attributes> map = manifest.getEntries();
 			Iterator<String> keyIterator = map.keySet().iterator();
 			while(keyIterator.hasNext()){
 				String name = keyIterator.next();
  				if(Pattern.matches(pattern,name)){
  					retVal.put(name,new Version(map.get(name),name));
 				}
 			}
 		}
 		return retVal;
 	}
 
 	public static void main(String args[]){
 		Map<String,Version> versions = new VersionCrator().createVersion("org/apache/.*");
 		Iterator<String> keySet = versions.keySet().iterator();
 		while(keySet.hasNext()){
 			String name = (String)keySet.next();
 			Version version = versions.get(name);
 			System.out.println(version.getAttributesWithManifestName(Version.Implementation_Version));
 			
 		}
 	}
 	
 	
 }

タグ:

+ タグ編集
  • タグ:
最終更新:2008年10月11日 00:50
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。