`

查找jar中的pom文件

    博客分类:
  • java
 
阅读更多
/**
     * 查找dependency节点
     * 比较 groupId artifactId version(使用正则判断)
     * 有匹配的结果返回true
     * 
     * @param dependency
     * @param groupIdReg
     * @param artifactIdReg
     * @param versionReg
     * @return
     */
    public static boolean findDependency(Node dependency, String groupIdReg,
            String artifactIdReg, String versionReg) {
        String nodeName = dependency.getNodeName();
        boolean b_groupId = false;
        boolean b_artifactId = false;
        boolean b_version = true;
        if (null == groupIdReg && null == artifactIdReg && null == versionReg)
            return false;
        if (null == nodeName)
            return false;
        nodeName=nodeName.toLowerCase();
        String textContent=String.valueOf(dependency.getTextContent());
        if (null != groupIdReg && "groupid".equals(nodeName)) {
            b_groupId = Pattern.compile(groupIdReg)
                    .matcher(textContent).matches();
        }
        if (null != artifactIdReg && "artifactid".equals(nodeName)) {
            b_artifactId = Pattern.compile(artifactIdReg)
                    .matcher(textContent).matches();
        }
        // version 暂不使用
//      if (null != versionReg && "version".equals(nodeName)) {
//          b_version = Pattern.compile(versionReg)
//                  .matcher(textContent).matches();
//      }
        // version不作为主要的查询条件,只作为groupId 或artifactId的附加条件
        // 只有当groupId 或artifactId两者匹配时,才会对version进行匹配
        //  单独只匹配version无意义
        return (b_groupId || b_artifactId);
    }
 
    /**
     * 获取jar文件中的pom文件解析出dependencies节点,然后再去解析dependency节点
     * @param in
     * @param groupIdReg
     * @param artifactIdReg
     * @param versionReg
     * @return
     * @throws Exception
     */
    public static boolean excutefind(InputStream in, String groupIdReg,
            String artifactIdReg, String versionReg) throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory
                .newInstance();
        Document document = builderFactory.newDocumentBuilder().parse(in);
        if(null == document.getElementsByTagName("dependencies").item(0))
            return false;
        //dependencies节点
        NodeList nodeList = document.getElementsByTagName("dependencies")
                .item(0).getChildNodes();
        Node node = null;
        for (int i = 0; i < nodeList.getLength(); i++) {
            node = nodeList.item(i);
            if ("dependency".equals(node.getNodeName()) && node.hasChildNodes()) {
                //dependency 节点
                NodeList tlist = node.getChildNodes();
                for (int m = 0; m < tlist.getLength(); m++) {
                    if (findDependency(tlist.item(m), groupIdReg,
                            artifactIdReg, versionReg)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    /**
     * 找出basePath里面的所有jar文件
     * @param basePath  一般为tomcat中工程的lib目录
     * @param fileName   在jar文件中需要查找的文件名称 (pom.xml)
     * @param groupIdReg
     * @param artifactIdReg
     * @param versionReg
     * @return
     */
    public static List<File> find(String basePath, String fileName,
            String groupIdReg, String artifactIdReg, String versionReg) {
        List<File> list = new ArrayList<File>();
        File root = new File(basePath);
        File[] fileList = root.listFiles(new FileFilter(){
            @Override
            public boolean accept(File f) {
                // TODO Auto-generated method stub
                return f.getName().endsWith(".jar");
            }
 
        });
        for (int i = 0; i < fileList.length; i++) {
            try {
                @SuppressWarnings("resource")
                JarFile jarFile = new JarFile(fileList[i]);
                //  jar文件中的所有JarEntry
                Enumeration<JarEntry> entries = jarFile.entries();
                while (entries.hasMoreElements()) {
                    JarEntry jarEntry = (JarEntry) entries.nextElement();
                    String name = jarEntry.getName();
                    // 获取pom.xml文件
                    if (null != name
                            && fileName.equals(name.substring(
                                    name.lastIndexOf("/") + 1, name.length()))) {
                        boolean result=POMFind.excutefind(jarFile.getInputStream(jarEntry),
                                groupIdReg, artifactIdReg, versionReg);
                        if(result)
                            list.add(fileList[i]);
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return list;
    }
 
    /**
     * @since 2014-3-20
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String basePath = "F:\\test\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\webapp\\WEB-INF\\lib\\";
        String fileName = "pom.xml";
        String artifactIdReg = "^XmlSchema$";
        List<File> list = find(basePath, fileName, null, artifactIdReg, null);
        for (File f : list) {
            System.err.println(f.getName());
        }
    }

 

分享到:
评论

相关推荐

    maven jar包直接根据pom下载

    当你在POM文件中添加依赖时,Maven会自动从中央仓库或其他指定的远程仓库下载这些依赖及其传递性依赖,即依赖的依赖。这个过程被称为依赖解析。 具体步骤如下: 1. **编辑POM文件**:打开你的POM.xml,将你需要的...

    超级POM_POM文件总体配置说明.pdf

    《超级POM与POM文件总体配置详解》 在Maven的世界里,POM(Project Object Model)是项目的核心,它是Maven理解并管理项目的基石。POM.xml文件是Maven项目的配置文件,包含了项目的元数据,如项目依赖、构建过程、...

    pom文件依赖jar库文件m2.rar

    在这个场景中,我们讨论的是一个名为“pom文件依赖jar库文件m2.rar”的压缩包,它很可能包含了用户`Administrator`的本地Maven仓库`.m2`目录中的jar库文件。 `.m2`目录是Maven默认的本地仓库路径,它存储着所有已...

    批量修改pom 的版本依赖

    本文将深入探讨如何批量修改POM文件中的依赖版本,并结合`POMDependencyVerifierTest.java`这个文件名,推测这是一个用于测试POM依赖验证的Java类。 1. **Maven依赖管理**: Maven依赖管理通过在顶级pom.xml(如果...

    根据pom.xml下载依赖

    例如,一个简单的pom.xml文件中的依赖可能如下所示: ```xml &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context &lt;version&gt;5.3.14 &lt;groupId&gt;junit &lt;artifactId&gt;junit &lt;version&gt;4.13.2 &lt;scope&gt;...

    IDEA中如何查找jar包之间的依赖关系并忽略依赖的某个包

    例如,想要忽略tomcat-embed-core、tomcat-embed-el和tomcat-embed-websocket三个jar包,可以在pom文件中添加以下代码: &lt;!-- 去掉springboot的tomcat配置 --&gt; &lt;groupId&gt;org.apache.tomcat.embed ...

    maven:pom文件详解.docx

    《Maven POM 文件详解与配置指南》 Maven 是一个强大的Java项目管理工具,它的核心在于Project Object Model,简称POM。POM文件是Maven项目的核心配置...正确配置POM文件,能够确保项目在整个生命周期中的无缝管理。

    eclipse文件快速定位jar

    1. **Eclipse的基本操作:查找JAR文件** 在Eclipse中,你可以通过项目浏览器(Project Explorer)或导航器(Navigator)视图来查看项目的文件结构。当你知道JAR文件名时,可以直接在视图中搜索(快捷键:Ctrl + ...

    maven多模块打包pom文件

    1. **多模块配置**:在父POM文件中,需要通过`&lt;modules&gt;`标签声明所有的子模块。例如: ```xml &lt;module&gt;module1 &lt;module&gt;module2 &lt;module&gt;module3 ``` 这里的`module1`, `module2`, `module3`代表子模块的相对...

    关于创建可执行的jar文件

    - **Maven**:在项目的`pom.xml`文件中添加`maven-jar-plugin`插件,并指定主类。例如: ```xml &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-jar-plugin &lt;version&gt;3.2.0 &lt;addClasspath&gt;...

    pom配置文件 maven_repository.rar

    5. **packaging**:项目打包类型,如`jar`、`war`或`pom`。 6. **dependencies**:项目的依赖列表,每个依赖包含groupId、artifactId和version。 7. **dependencyManagement**:依赖管理,用于统一管理项目的依赖...

    常用pom.xml文件.zip

    本文将深入探讨Maven工程的核心配置文件——pom.xml,以及它在项目构建过程中的重要作用。 pom.xml,全称Project Object Model(项目对象模型),是Maven项目的灵魂所在。它定义了项目的元数据,包括项目信息、构建...

    jacob-1.19 版本jar包

    1. **手动添加依赖**:由于jacob-1.19不在Maven中央仓库,需要将jar包手动放入项目的lib目录,并在pom.xml文件中添加本地依赖。 2. **配置Maven settings.xml**:为避免每次都手动添加,可以在settings.xml的`...

    Maven POM文件超详细超全的总体配置说明

    ### Maven POM文件超详细超全的总体配置说明 #### 一、概述 POM (Project Object Model) 文件是 Maven 项目的核心配置文件,用于定义项目的构建规则与依赖关系等重要信息。通过深入理解 POM 文件的各项配置,可以...

    Spring整合CXFwebservice所需JAR

    在 Maven 项目中,可以在 `pom.xml` 文件中添加 CXF 的依赖,或者在非 Maven 项目中,将 JAR 文件放入项目的 `WEB-INF/lib` 目录。 2. **配置 Spring**:在 Spring 配置文件(如 `applicationContext.xml`)中,你...

    maven批量导入第三方jar包至本地库工具

    4. **配置POM**:如果需要在项目中使用这些导入的jar包,你需要在项目的`pom.xml`文件中添加相应的依赖条目,包括groupId、artifactId、version等信息。 5. **项目构建**:配置完成后,Maven在构建项目时就能找到...

    hive相关jar包

    "maven"标签表明这些jar包可以用在Maven项目中,通过在pom.xml文件中指定依赖,就可以在项目中使用Hive的功能。 使用这些jar包时,开发者通常会将它们添加到项目的类路径中,或者在运行Hive命令时通过`-libjars`...

    IBM MQ 全部JAR包

    在这个“IBM MQ全部JAR包”的压缩文件中,包含了进行JAVA开发时与MQ交互所需的关键库。 首先,我们来看一下描述中提到的“JAVA发送文本内容至MQ中”。这涉及到IBM MQ的Java API,主要由以下几部分组成: 1. **...

    详解如何将本地JAR包添加到本地Maven仓库中

    4. 执行完上述命令后,Maven会将JAR包及其POM文件(其中包含上述各项参数)添加到本地仓库中,通常是在用户的home目录下的.m2文件夹内。 5. 完成安装之后,你可以直接在自己的Maven项目中的pom.xml文件中通过添加...

    访问 IBM MQ 服务所需要jar包

    总的来说,IBM MQ服务包中的jar文件提供了全面的Java API,使得开发者能够在各种Java环境中无缝地与IBM MQ进行通信,实现可靠、高效的消息传递。在使用这些jar包时,需要确保版本与MQ服务器的版本兼容,以避免可能...

Global site tag (gtag.js) - Google Analytics