You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Maven中获取依赖树而不下载被隔离的JAR包

获取隔离JAR场景下的Maven依赖树方法

Maven命令方式

因为被隔离的只是JAR包,POM仍可正常访问,所以可以通过让Maven仅解析POM来生成依赖树,跳过JAR下载步骤:

  • 执行以下命令:
    mvn dependency:tree -Dmaven.dependency.get.jars=false -Dmaven.dependency.get.sources=false
    
    这两个参数会阻止Maven尝试下载JAR和源码文件,仅通过POM解析完整的依赖树,避免405错误中断流程。
  • 若需要指定特定配置文件,可追加-s /path/to/settings.xml参数,确保Maven能正确访问内部Artifactory仓库(如有认证需求)。

Java代码方式

使用Apache Maven Resolver库手动解析POM并构建依赖树,该库支持单独处理POM解析,无需下载JAR:

  1. 先添加必要依赖到你的项目POM:

    <dependency>
        <groupId>org.apache.maven.resolver</groupId>
        <artifactId>maven-resolver-api</artifactId>
        <version>1.9.15</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.resolver</groupId>
        <artifactId>maven-resolver-impl</artifactId>
        <version>1.9.15</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.resolver</groupId>
        <artifactId>maven-resolver-connector-basic</artifactId>
        <version>1.9.15</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.resolver</groupId>
        <artifactId>maven-resolver-transport-http</artifactId>
        <version>1.9.15</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-model-builder</artifactId>
        <version>3.9.5</version>
    </dependency>
    
  2. 编写解析代码:

    import org.apache.maven.model.Model;
    import org.apache.maven.model.building.DefaultModelBuilder;
    import org.apache.maven.model.building.DefaultModelBuilderFactory;
    import org.apache.maven.model.building.DefaultModelBuildingRequest;
    import org.apache.maven.model.building.ModelBuildingRequest;
    import org.apache.maven.resolver.examples.util.Booter;
    import org.apache.maven.resolver.internal.impl.DefaultRepositorySystem;
    import org.apache.maven.resolver.repository.RepositorySystem;
    import org.apache.maven.resolver.repository.RepositorySystemSession;
    import org.apache.maven.resolver.repository.remote.RemoteRepository;
    
    import java.io.File;
    import java.util.List;
    
    public class DependencyTreeParser {
        public static void main(String[] args) throws Exception {
            // 初始化仓库系统
            RepositorySystem repoSystem = Booter.newRepositorySystem();
            RepositorySystemSession session = Booter.newRepositorySystemSession(repoSystem);
    
            // 配置内部Artifactory仓库(替换为实际地址)
            RemoteRepository internalRepo = new RemoteRepository.Builder("internal-artifactory", "default", "http://your-artifactory-url/repository/maven-public/")
                    .build();
            session.setRemoteRepositories(List.of(internalRepo));
    
            // 加载目标项目POM
            File pomFile = new File("/path/to/your/project/pom.xml");
            DefaultModelBuilder modelBuilder = new DefaultModelBuilderFactory().newInstance();
            ModelBuildingRequest request = new DefaultModelBuildingRequest()
                    .setPomFile(pomFile)
                    .setRepositorySession(session)
                    .setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
    
            // 构建模型并打印依赖树
            Model model = modelBuilder.build(request).getEffectiveModel();
            System.out.println("项目依赖树:");
            printDependencyTree(model.getDependencies(), 0);
        }
    
        private static void printDependencyTree(List<org.apache.maven.model.Dependency> dependencies, int depth) {
            String indent = "  ".repeat(depth);
            for (org.apache.maven.model.Dependency dep : dependencies) {
                System.out.printf("%s%s:%s:%s%n", indent, dep.getGroupId(), dep.getArtifactId(), dep.getVersion());
                // 如需递归解析传递依赖,可扩展此处逻辑:通过仓库系统获取依赖的POM并继续解析
            }
        }
    }
    

    注意:替换代码中的仓库地址和POM路径,若仓库需要认证,需在仓库配置中添加用户名和密码。


内容的提问来源于stack exchange,提问作者himanshu_mps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:22:14