有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java换行符忽略正则表达式以在清单文件中查找包名

考虑下面的清单文件作为一个例子:

Manifest-Version: 1.0
Bnd-LastModified: 1418226794711
Build-Jdk: 1.7.0_67
Built-By: ubuntu
Bundle-Description: Camel FTP support
Bundle-DocURL: http://www.apache.org/
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion: 2
Bundle-Name: camel-ftp
Bundle-SymbolicName: org.apache.camel.camel-ftp
Bundle-Vendor: The Apache Software Foundation
Bundle-Version: 2.14.1
Created-By: Apache Maven Bundle Plugin
Export-Package: org.apache.camel.component.file.remote;uses:="com.jcraft
 .jsch,org.slf4j,org.apache.camel.util,org.apache.camel.component.file,o
 rg.apache.camel,org.apache.commons.net.ftp,org.apache.camel.spi,org.apa
 che.camel.util.jsse,javax.net.ssl,org.apache.camel.impl,org.apache.came
 l.processor.idempotent";version="2.14.1",org.apache.camel.component.fil
 e.remote.strategy;uses:="org.apache.camel.util,org.apache.camel.compone
 nt.file,org.apache.camel,org.apache.commons.net.ftp,org.slf4j,org.apach
 e.camel.component.file.strategy,com.jcraft.jsch";version="2.14.1"
Export-Service: org.apache.camel.spi.ComponentResolver;component=ftp,org
 .apache.camel.spi.ComponentResolver;component=ftps,org.apache.camel.spi
 .ComponentResolver;component=sftp
Implementation-Title: Apache Camel
Implementation-Version: 2.14.1
Import-Package: com.jcraft.jsch;version="[0.1.40,0.2)",javax.net.ssl,org
 .apache.camel;version="[2.14,2.15)",org.apache.camel.component.file;ver
 sion="[2.14,2.15)",org.apache.camel.component.file.strategy;version="[2
 .14.1,2.14.2)",org.apache.camel.impl;version="[2.14,2.15)",org.apache.c
 amel.processor.idempotent;version="[2.14,2.15)",org.apache.camel.spi;ve
 rsion="[2.14,2.15)",org.apache.camel.util;version="[2.14,2.15)",org.apa
 che.camel.util.jsse;version="[2.14,2.15)",org.apache.commons.net.ftp;ve
 rsion="[3.3,4)",org.slf4j;version="[1.6,2)"
Karaf-Info: Camel;camel-ftp=2.14.1
Tool: Bnd-1.50.0

在寻找依赖性问题的过程中,我经常在项目清单中搜索特定的包。然而,由于断线,很难找到它们。例如,如果我要查找org。阿帕奇。骆驼组成部分文件遥远的策略作为简单文本,无法找到,因为在组织之后有一个换行符。阿帕奇。骆驼组成部分fil

你能想象出任何正则表达式可以用来搜索忽略任何位置换行的文本吗?可以用正则表达式吗?请提供一个示例regex来查找org。阿帕奇。骆驼组成部分文件遥远的战略!是否有其他解决方案可以轻松搜索清单


共 (2) 个答案

  1. # 1 楼答案

    为什么不使用Manifest类来处理清单文件?您可以使用接受InputStream的构造函数

    在分析清单之后,您可以获得所需的特定属性(我猜您的案例中是导出包)

    同样,如果使用正则表达式,您可能会有一个错误,即在Export package子句的属性或指令之一(例如:在uses指令中)中找到一个包。因此,我建议您应该使用felix utils库来解析每个子句

    例如:

    String searchedPackageName = "org.apache.camel.component.file.remote.strategy";
    
    Manifest manifest = new Manifest(streamOfTheManifest);
    String exportPackageHeader = manifest.getMainAttributes().getValue("Export-Package");
    
    // Parser and clause comes from org.apache.felix.utils.manifest package
    Clause[] clauses = Parser.parseHeader(exportPackageHeader);
    
    for (Clause exportPackageClause : clauses) {
        String exportedPackageName = exportPackageClause.getName();
        if (searchedPackageName.equals(exportedPackageName) {
        // Do your stuff here
      }
    }
    
  2. # 2 楼答案

    把你的搜索词和

    • 摆脱正则表达式的特殊字符,例如->;\
    • 在所有字符之间添加“\s*”

    并确保使用dotall和Multiline运行正则表达式

    非常好的正则表达式开发工具是位于http://sourceforge.net/projects/quickrex/的eclipse插件

    在清单中搜索可以通过我编写的一个小型文件搜索库来实现。这允许cmd行执行“java-jar…”。这个库最初的目的正是您的任务描述——捆绑包及其清单中的依赖关系研究。MF文件。 来源是这里https://github.com/peterkir/klib.io