是否有任何可用的工具可以从 jar 中获取 manifest.mf 文件并很好地显示内容?
特别是在使用 OSGi 包时,Export-Package 和 Import-Package 条目可能会变得非常大,并且很难完全弄清楚发生了什么。添加到这个简单的关键字文本搜索不是 100% 可靠,因为换行符。
我相信BND 工具的 eclipse 插件做得很好。它有一个用于查看 jar 文件的编辑器。
这是清单文件的在线漂亮打印机,带有可选排序:
这是一个在线漂亮的清单打印机; https://apinx.dk/javamanifest/
您可以拖放 .jar 文件或复制粘贴 manifest.mf 本身。
bnd 本身可以从命令行运行,并将打印所有详细信息:
java -jar biz.aQute.bnd.run.jar xx.jar
您还可以单击 bndtools 中的 jar 并选择打印选项卡,这会为您提供比您可能需要的更多详细信息。
键入 bnd help 以获取有关命令的信息。
用 javascript 解析它;)这是一个JSFiddle,可以漂亮地打印一个 OSGi MANIFEST.MF 文件:
http://jsfiddle.net/scotch/5WJwd/embedded/result/
var sectionsText = text.split(/\n\n\n/),
sections = {},
sectionText,
name,
body,
packagesText,
packages,
packageName,
packageBody;
for (var i in sectionsText) {
sectionText = sectionsText[i];
name = sectionText.substr(0, sectionText.indexOf(": "));
body = sectionText.substr(sectionText.indexOf(": ") + 2);
sections[name] = body;
if (name.indexOf("Package") != -1) {
body = body.replace(/[\n\r] /g, '');
body = body.replace(/(,)(?=(?:[^"]|"[^"]*")*$)/g, "$1\n");
packagesText = body.split(/\n/);
packages = {};
for (var i in packagesText) {
packageBody = packagesText[i];
packageName = packageBody.substr(0, packageBody.indexOf(";"));
packageBody = packageBody.substr(packageBody.indexOf(";")+1);
if (collapse) {
packageBody = packageBody.replace(/uses:="[^"]*"/g, 'uses:="..."');
}
packages[packageName] = packageBody;//.replace(/;/g, ';\n');
}
sections[name] = packages;
}
}
它也按字母顺序对条目进行排序,因此您可以比较它们。希望它对某人(尤其是在 Eclipse 之外开发的人)有用。
我从 Maven Central 下载了 bnd.jar。
http://repo1.maven.org/maven2/biz/aQute/bnd/bnd/2.2.0/bnd-2.2.0.jar
是的,我可以运行它,它会漂亮地打印清单:
java -jar bnd-2.2.0.jar example.jar
打印命令显示 Import-Package 和 Export-Package 更好:
java -jar bnd-2.2.0.jar print example.jar
如果您使用的是 eclipse,则可以使用由配置的插件清单编辑器