2009-09-17 2 views
18

groupId, artifactId 및 버전을 구성하는 Maven 플러그인이 있습니다.플러그인 내에서 Maven 아티팩트를 다운로드하려면 어떻게해야합니까?

원격 저장소에서 해당 이슈를 다운로드하고 파일을 프로젝트에 복사 할 수 있기를 원합니다. 나는 어떻게 유물을 다운로드하는지 알 수 없다.

종속성 플러그인을 사용하여 종속성을 해결할 수 있다고 생각하지만 플러그인 내에서 발생해야합니다. 어떻게해야합니까?

답변

24

귀하의 플러그인은 ArtifactFactory 및 groupId, artifactId 및 부트 스트랩 될 이슈의 버전을 사용하여 Artifact를 생성 한 다음 해당 이슈를 ArtifactResolver에 전달하여 검색/다운로드를 처리해야합니다.

해결 프로그램은 로컬 리포지토리 및 원격 리포지토리에 액세스해야합니다. 좋은 소식은 모든 것들이 당신의 모조 (Mojo)에서 의존성으로 선언 할 수있는 신경 얼기 (Plexus) 구성 요소이며, Plexus가 당신을 위해 그들을 묶어 둘 수 있다는 것입니다.

another answer에서 나는이 작업을 수행하는 방법을 보여 주었다. 귀하의 경우에는 groupId, artifactId 및 version을 읽기 위해 약간 다른 매개 변수를 가진 잘린 버전이 필요합니다. 아래의 플러그인에서 다양한 구성 요소는 신경총 구성 요소로 선언되고 groupId, artifactId, 버전 및 패키징 유형을 선언하는 속성이 선언됩니다.

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>name.seller.rich</groupId> 
    <artifactId>bootstrap-test</artifactId> 
    <version>1.0.0</version> 
    <build> 
     <plugins> 
     <plugin> 
      <groupId>name.seller.rich</groupId> 
      <artifactId>maven-bootstrap-plugin</artifactId> 
      <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
       <goal>bootstrap</goal> 
       </goals> 
       <configuration> 
       <bootstrapGroupId>org.aspectj</bootstrapGroupId> 
       <bootstrapArtifactId>aspectjrt</bootstrapArtifactId> 
       <bootstrapVersion>1.6.4</bootstrapVersion> 
       <bootstrapType>pom</bootstrapType> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+0

와우, 감사 :

package name.seller.rich.maven.plugins.bootstrap; import java.util.List; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * Obtain the artifact defined by the groupId, artifactId, and version * from the remote repository. * * @goal bootstrap */ public class BootstrapAppMojo extends AbstractMojo { /** * Used to look up Artifacts in the remote repository. * * @parameter expression= * "${component.org.apache.maven.artifact.factory.ArtifactFactory}" * @required * @readonly */ protected ArtifactFactory factory; /** * Used to look up Artifacts in the remote repository. * * @parameter expression= * "${component.org.apache.maven.artifact.resolver.ArtifactResolver}" * @required * @readonly */ protected ArtifactResolver artifactResolver; /** * List of Remote Repositories used by the resolver * * @parameter expression="${project.remoteArtifactRepositories}" * @readonly * @required */ protected List remoteRepositories; /** * Location of the local repository. * * @parameter expression="${localRepository}" * @readonly * @required */ protected ArtifactRepository localRepository; /** * The target pom's artifactId * * @parameter expression="${bootstrapArtifactId}" * @required */ private String bootstrapArtifactId; /** * The target pom's groupId * * @parameter expression="${bootstrapGroupId}" * @required */ private String bootstrapGroupId; /** * The target pom's type * * @parameter expression="${bootstrapType}" * @required */ private String bootstrapType; /** * The target pom's version * * @parameter expression="${bootstrapVersion}" * @required */ private String bootstrapVersion; public void execute() throws MojoExecutionException, MojoFailureException { try { Artifact pomArtifact = this.factory.createArtifact( bootstrapGroupId, bootstrapArtifactId, bootstrapVersion, "", bootstrapType); artifactResolver.resolve(pomArtifact, this.remoteRepositories, this.localRepository); } catch (ArtifactResolutionException e) { getLog().error("can't resolve parent pom", e); } catch (ArtifactNotFoundException e) { getLog().error("can't resolve parent pom", e); } } } 

는 플러그인을 사용 (그리고 aspectjrt 1.6.4 치어 다운로드)하도록 구성된 치어의 예입니다. 나는 그것을 시도해 줄 것이다 –

+0

다시 감사합니다, 그것은 잘 작동합니다. 다운로드 한 파일에 대해 maven 프로젝트를 얻는 좋은 방법은 무엇입니까? –

+0

그건 정말 별개의 질문입니다 : -/ –