【问题标题】:Manifest.mf file viewer?Manifest.mf 文件查看器?
【发布时间】:2012-10-05 11:29:13
【问题描述】:

是否有任何工具可以从 jar 中获取 manifest.mf 文件并很好地显示内容?

特别是在使用 OSGi 包时,Export-Package 和 Import-Package 条目可能会变得非常大,并且很难完全弄清楚发生了什么。由于换行,添加到这个简单的关键字文本搜索并不是 100% 可靠。

【问题讨论】:

    标签: java jar osgi manifest


    【解决方案1】:

    我在7-Zip 中打开了我的 jar(任何解压缩器/解压缩器都可以),然后您可以选择将 MANIFEST.MF 文件复制到计算机的其他位置。我将它复制到我的桌面,然后使用 Visual Studio Code 打开。任何文本编辑器都可以。

    另外,我用Atom 打开罐子。它显示了我的罐子的整个树结构。我双击了 MANIFEST.MF 文件,它直接在 Atom 中打开了。

    【讨论】:

      【解决方案2】:

      这是一个在线漂亮的清单打印机; https://apinx.dk/javamanifest/

      您可以拖放 .jar 文件或复制粘贴 manifest.mf 本身。

      【讨论】:

      • 对我不起作用。我试着像他们说的那样把清单拖到盒子里,但什么也没发生。
      • @Azurespot;我是这个网站的作者,你是对的。未正确处理非 zip 文件清单 - 现在是。感谢您的反馈!
      【解决方案3】:

      这是一个用于清单文件的在线漂亮打印机,具有可选的排序功能:

      https://robinst.github.io/jar-manifest-formatter/

      【讨论】:

        【解决方案4】:

        在 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 之外开发的人)。

        【讨论】:

          【解决方案5】:

          bnd 本身可以从命令行运行并打印所有详细信息:

           java -jar biz.aQute.bnd.run.jar xx.jar
          

          您还可以在 bndtools 中单击一个 jar 并选择打印选项卡,这将为您提供比您可能需要的更多详细信息。

          bnd可以从https://bndtools.ci.cloudbees.com/job/bnd.master/lastSuccessfulBuild/artifact/dist/bundles/biz.aQute.bnd/biz.aQute.bnd-latest.jar下载

          键入 bnd help 以获取有关命令的信息。

          【讨论】:

          • cloudbees 链接已损坏。
          【解决方案6】:

          我从 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
          

          【讨论】:

            【解决方案7】:

            我相信 BND tools 的 eclipse 插件做得相当好。它有一个用于查看 jar 文件的编辑器。

            【讨论】:

            • 这几乎正是我所追求的 - JAR 编辑器仅将清单文件显示为纯文本,但 BND 捆绑编辑器似乎能够打开一个 jar 文件并很好地解析和显示导入 pkgs (+1 ) 但不是导出或私有 pkg​​s (-1)。
            • 其实那是不正确的。如果您已将 Jar 文件添加到 cnf 存储库,则只需单击存储库视图中的包,然后查看“导入/导出”视图。在那里,您将看到将导入哪些类型的包以及导出哪些类型的包。但当然不是私人的,因为它们仍然是私人的;)
            • 请注意,在最新版本的 Bndtools 中,您可以将 JAR 编辑器作为独立组件安装,即如果您不想安装,则不必安装整个 Bndtools。
            【解决方案8】:

            如果您使用的是 eclipse,您可以使用由配置的插件清单编辑器

            【讨论】:

            • Eclipse 本身不会打开 jar 文件,您必须先从它创建一个项目,然后才能使用编辑器。
            猜你喜欢
            • 2011-06-15
            • 1970-01-01
            • 2011-12-19
            • 1970-01-01
            • 1970-01-01
            • 2013-04-17
            • 1970-01-01
            • 2011-08-13
            • 2019-08-05
            相关资源
            最近更新 更多