java - 如何实例化 MavenResolver 以供 ModelBuilder 使用?

标签 java maven maven-3

这是 this answer 的延续.

我正在尝试使用 maven-model-builder 以编程方式访问 pom.xml 的完整有效 pom 。目前,我因需要创建 MavenResolver 对象而受阻。我找到了 DefaultMavenResolver 但它的访问权限受到限制。

我也在一个不是 Maven 插件的项目中。如果我可以在不执行 Maven 的情况下实例化它,那就太好了。

最佳答案

实际上这非常简单(我使用了 Scala,但这并不重要):

import java.io.File

import org.apache.maven.model.Dependency
import org.apache.maven.model.building.{DefaultModelBuilderFactory, DefaultModelBuildingRequest, ModelBuildingRequest}

object POMParser {

  def parse(pomXml: File): List[Dependency] = {
    val modelBuilder = new DefaultModelBuilderFactory().newInstance()
    val req = new DefaultModelBuildingRequest()
    req.setPomFile(pomXml)
    req.setProcessPlugins(false)
    req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL)
    val model = modelBuilder.build(req).getEffectiveModel
    import collection.JavaConverters._
    model.getDependencies.asScala
  }

}

这将返回填充了所有依赖项的有效模型,并且父 POM 文件属性中的所有占位符也会被解析。

希望能帮助到和OP有同样问题的人。

关于java - 如何实例化 MavenResolver 以供 ModelBuilder 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27383357/

相关文章:

java - 为什么 SpringJUnit4ClassRunner 不能使用 surefire parallel=methods?

maven - Maven 上的依赖冲突

java - 如何使用 Java Compiler Tree API (com.sun.source.util) 重构源代码

java - 使用 RTL 语言的正则表达式

eclipse - Maven - 为什么在 "mvn clean"之后我需要在 "Maven Update Project"之前执行 "mvn package"?

java - 如何使用 Maven 设置 LWJGL?

java - 使用 Maven 进行目标特定的 Java 更新

java - Gradle-项目中多个Java程序的运行任务

java - 以最小的质量损失减小 android 中的视频大小

java - 包含 ejb 3.1 和 jsf 页面的依赖项 jar