一個OSGi bundle可能會有大量的引入、導出包,這會使它的manifest.mf文件很長,讓人看得眼花繚亂,於是我們經常需要在其中查找一些東西,但是由於manifest.mf文件本身的原因,給查找帶來一些麻煩,比如下面從manifest.mf的“DynamicImport-Package”中摘取出的一小段(還有很長,但沒必要全列在這裏了):
, javax.xml.parsers, javax.xml.transform, javax.xml.transform.dom, ja
vax.xml.transform.sax, javax.xml.transform.stream, javax.xml.validati
on, javax.xml.xpath,jp.co.swiftinc.relax.schema, jp.co.swiftinc.relax
.verifier, kaffe.rmi.rmic, org.apache.avalon.framework.logger, org.ap
ache.bcel.classfile, org.apache.bsf, org.apache.env, org.apache.log,
org.apache.tools.ant.launch, org.apache.tools.ant.taskdefs.optional,
若我們要在其中找“apache”,第四行最後和第五行開始實際上有一個“apache”然而,由於它跨在兩行,且第五行開頭還有一個空格,用eclipse的一般查找是找不到這個的。爲什麼會這樣跨行以至於把一個單詞都分在兩行呢,是因爲這是用bnd做出的一個bundle,bnd做出的manifest.mf就是這個風格。
我們利用eclipse的正則表達式查找來解決這個問題。以上面的例子說,這需要把查找字串由“apache”變成“a/s*p/s*a/s*c/s*h/s*e”,如果要找的串比較長的話,這是比較麻煩的事情。於是我們編了一個java小程序來解決這個問題,該程序從鍵盤讀入要找的字串,自動向中間添加“/s*”,代碼如下:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int i, lenOfStr;
while (true) {
System.out.print("Please input a string in a line:");
String str = in.nextLine();
lenOfStr = str.length();
StringBuffer strBuf = new StringBuffer();
if (lenOfStr > 0) {
for (i = 0; i < lenOfStr - 1; i++) {
strBuf.append(str.charAt(i));
strBuf.append("//s*");
}
strBuf.append(str.charAt(i));
}
System.out.println(strBuf.toString());
}
}