マニフェストファイルにアクセスするサンプル
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