以下列清单文件为例:
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.apache.camel.component.file.remote.strategy作为简单文本查找,则不会找到它,因为在org.apache.camel.component.fil之后有一个行中断。
,您能想象任何正则表达式,它可以用于搜索文本,忽略任何位置的换行吗?有可能用雷克斯吗?请提供一个查找org.apache.camel.component.file.remote.strategy!的示例regex是否有任何其他解决方案可以方便地在清单中搜索?
发布于 2015-03-18 09:43:32
为什么不使用清单类来处理清单文件?您可以使用接受InputStream的构造函数。
解析完报表后,您可以获得所需的特定属性(我猜在您的示例中是Export)。
同样,如果使用正则表达式,您可能会在Export子句的一个属性或指令中找到一个包(例如:在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
}
}发布于 2015-03-25 10:57:04
拿上你的搜索词
并确保运行您的RegEx与dotall和Multiline。
用于RegEx开发的非常好的工具是http://sourceforge.net/projects/quickrex/的eclipse插件。
在清单中搜索可以通过我编写的一个小型FileSearch库来实现。这允许cmd行执行"java -jar .“。这个库的目的最初正是您的任务描述--在包及其MANIFEST.MF文件中进行依赖关系研究。源在这里,https://github.com/peterkir/klib.io
https://stackoverflow.com/questions/29118331
复制相似问题