2014-12-09 2 views
1

이것은 this answer의 연속입니다.ModelBuilder 사용을 위해 MavenResolver를 인스턴스화하는 방법은 무엇입니까?

maven-model-builder을 사용하여 프로그래밍 방식으로 pom.xml의 전체 유효 메모리에 액세스하려고합니다. 현재 MavenResolver 개체를 만들어야한다는 사실에 의해 차단되었습니다. 나는 DefaultMavenResolver을 찾았지만 액세스가 제한되어 있습니다.

나는 또한 메이븐 플러그인이 아닌 프로젝트에 있습니다. maven을 실행하지 않고 이것을 인스턴스화 할 수 있다면 좋을 것입니다.

답변

1

은 실제로는 (I 스칼라를 사용하지만 정말 중요하지 않습니다) 아주 간단했다 :

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와 같은 문제가있는 분을 돕는 희망.

+0

구문 분석 된 pomFile이 부모 pom을 정의하는 경우 modelResolver가 필요합니다. – mcoolive

관련 문제