2011-01-29 3 views

답변

19

MavenXpp3Readermaven-model의 일부입니다. 샘플 코드 : 거기에 사용할 수있는 API를 사용하여 그것을 달성하는 쉬운 방법이 있기 때문에

MavenXpp3Reader reader = new MavenXpp3Reader(); 
Model model = reader.read(new FileReader(mypom)); 
29

는 첫째, 나는 이미 Maven 플러그인 내에서 실행되지 않습니다 있으리라 믿고있어.

이전에 게시 된 MavenXpp3Reader 솔루션을 사용하면 POM을 쉽게 읽을 수 있지만 부모의 상속과 표현식 보간은 고려하지 않습니다.

그 때문에 ModelBuilder 클래스를 사용해야합니다. 이것의

사용 Archiva에서 예를 들어,이 코드 조각은 매우 간단하다

ModelBuildingRequest req = new DefaultModelBuildingRequest(); 
req.setProcessPlugins(false); 
req.setPomFile(file); 
req.setModelResolver(new RepositoryModelResolver(basedir, pathTranslator)); 
req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL); 

Model model; 
try 
{ 
    model = builder.build(req).getEffectiveModel(); 
} 
catch (ModelBuildingException e) 
{ 
    ... 
} 

이 있지만 실행하는 두 가지 작업을 수행해야합니다

  1. 인스턴스화 및 와이어 ModelBuilder의 인스턴스를 비공개 필드를 포함한
  2. 상위 POM을 찾는 데 Maven의 확인자 중 하나를 사용하거나 직접 작성하십시오 (위의 스 니펫 에서처럼)

가장 좋은 방법은 이미 사용중인 DI 프레임 워크 또는 Maven의 기본 컨테이너를 포함할지 여부에 따라 다릅니다.

+0

내가 아는 한, 이것은 Maven 3 방법이다. Maven 2.2.x 접근 방식은 무엇입니까? 미리 감사드립니다. – carlspring

+1

라이브러리가 호환되므로 임베딩을 위해 maven 3 라이브러리를 사용하는 것이 좋습니다. Maven 2 라이브러리를 실제로 사용해야하는 경우 여기에서 예제를 찾을 수 있습니다. https://github.com/brettporter/centrepoint/blob/master/centrepoint/modules/maven-importer/src/main/java/com/ effectivemaven/centrepoint/maven/repository/CentralRepositoryService.java –

+0

그 해명을 가져 주셔서 감사합니다! 매우 감사! – carlspring

2

이것은 달성하려는 목표에 따라 다릅니다. XML 파일이 포함 된 XML로 처리하려는 경우 이미 제안 된 제안 사항을 따르십시오.

일부 형식의 Maven 기능을 앱에 구현하려는 경우 새로운 aether 라이브러리를 사용해 볼 수 있습니다. 필자는 사용하지 않았지만, 통합하기에 충분히 단순 해 보이고 사용자가 적은 노력으로 Maven 기능을 제공해야합니다.

현재이 라이브러리는 Maven 2가 아니라 Maven 3 라이브러리입니다 (태그에 지정된대로). 그게 너에게 큰 차이가 있는지 모르겠다.

+0

aether로 플러그인 구성을 읽을 수 있습니까? –

+1

와우, 좀비 주제. 어쨌든, 내가 말했듯이, 당신이하려는 일에 달려 있습니다. 외부에서 maven에 대한 설정을 구문 분석하는 경우 일반 XML 파서를 사용합니다. 만약 당신이 플러그인을 쓰고 있다면, 나는 할 수 있다고 생각 하겠지만, 더 새로운 라이브러리를 사용할 수있을 것이다. (나는 지금 Maven 개발자를 벗어났다.) 일부 플러그인 문서 (http://maven.apache.org/plugin-developers/ PS)를 볼 수 있습니다. 나는 aether에 대한 링크가 더 이상 작동하지 않는 새로운 링크를 발견했습니다 - http://www.eclipse.org/aether/ – GKelly

관련 문제