簡體   English   中英

使用Maven Resolver Provider以編程方式獲得有效的POM

[英]Programatically getting an effective POM using Maven Resolver Provider

我想做什么?

  • 給定本地文件系統上的POM文件。
  • 我想以編程方式獲取該POM文件的有效POM。 具體來說,我想做以下事情:

    • 解決POM依賴關系
    • 確保處理所有父POM
    • 獲取完全解析的POM的依賴項列表
    • 等等...
  • 我不需要獲得傳遞依賴。

什么有用?

我正在使用Maven Resolver Provider 但是我必須使用包私有類org.apache.maven.repository.internal.DefaultModelResolver

這里有一個GitHub鏈接到您可以運行的示例Maven項目: https//github.com/sahilm/maven-resolver-test

示例程序執行以下操作:

  • 從Maven Central下載最新的彈簧靴POM。
  • 打印出它的直接依賴關系(包含父代表)

您可以運行該程序: mvn exec:java -Dexec.mainClass="com.sahilm.maven_resolver_test.Test"

我需要幫助的是什么?

  • 我需要幫助,理解為什么我必須使用包私有類來獲取工作。
  • 有沒有其他方法來獲取我需要的信息?

您可以在包中創建(在您的項目中)公共類: org.apache.maven.repository.internal ,它擴展了package-accessibility類。 只需使用供應商無法在furutre中使用的類名。

package org.apache.maven.repository.internal;
public class VisibleDefaultModelResolver extends DefaultModelResolver{

    public VisibleDefaultModelResolver(RepositorySystemSession session, RequestTrace trace, String context, ArtifactResolver resolver, VersionRangeResolver versionRangeResolver, RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories) {
        super(session, trace, context, resolver, versionRangeResolver, remoteRepositoryManager, repositories);
    }

}

然后你的代碼變成:

ModelResolver modelResolver = new VisibleDefaultModelResolver(session, requestTrace, "context", artifactResolver, versionRangeResolver, remoteRepositoryManager, repos);

也許你可以使用ProjectModelResolver 這是一段代碼片段,

    DefaultRepositorySystem repositorySystem =
            new DefaultRepositorySystem();
    repositorySystem.initService(locator);

    ModelResolver modelResolver =
            new ProjectModelResolver(session, requestTrace,
                    repositorySystem, remoteRepositoryManager, repos,
                    ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT,
                    null);

我在這里包含了一個有效的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM