2016-02-17 3 views
9

私のプロジェクトで使用されている(再帰的に)すべての依存関係に関する情報を抽出しようとしています。 MavenProjectクラスが必要とするすべての情報を提供しているようです。しかし、私は私の依存関係のPOM内に配置されているが、Artifactのゲッターを経由して輸出されていない情報にアクセスする方法MavenProjectMaven Plugin API:ArtifactからMavenProjectを取得

/** 
* 
* 
* @reqiresDependencyResolution 
* 
*/ 
@Mojo(name = "license-overview", defaultPhase = LifecyclePhase.PROCESS_SOURCES) 
public class MyMojo extends AbstractMojo { 


    /** 
    * @parameter default-value="${project}" 
    * @required 
    * @readonly 
    */ 
    MavenProject project; 


    public void execute() throws MojoExecutionException { 

     Set<Artifact> artifacts= project.getArtifacts(); 
     for (Artifact artifact : artifacts) { 
      //Here I need to access the artifact's name, license, author, etc. 
      System.out.println("*** "+artifact.getArtifactId()+"***"); 
     } 

    } 
} 

のインスタンスにArtifactのインスタンスを変換する方法を見つけ出すことはできません?

答えて

8

はい、可能です。

我々はProjectBuilder APIと、メモリ内のプロジェクトをビルドすることができます。

は、プロジェクトのメモリ内の記述を構築します。 build(projectArtifact, request)我々が興味を持っているアーティファクトと方法とを呼び出すことによって

ProjectBuildingRequest(つまり、ローカル/リモートリポジトリなどの場所などの各種パラメータを保持している)、これは、メモリ内MavenProjectを構築します。

は、すべての依存関係の名前が印刷されます、次のMOJOを考えてみましょう:

@Mojo(name = "foo", requiresDependencyResolution = ResolutionScope.RUNTIME) 
public class MyMojo extends AbstractMojo { 

    @Parameter(defaultValue = "${project}", readonly = true, required = true) 
    private MavenProject project; 

    @Parameter(defaultValue = "${session}", readonly = true, required = true) 
    private MavenSession session; 

    @Component 
    private ProjectBuilder projectBuilder; 

    public void execute() throws MojoExecutionException, MojoFailureException { 
     ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest()); 
     try { 
      for (Artifact artifact : project.getArtifacts()) { 
       buildingRequest.setProject(null); 
       MavenProject mavenProject = projectBuilder.build(artifact, buildingRequest).getProject(); 
       System.out.println(mavenProject.getName()); 
      } 
     } catch (ProjectBuildingException e) { 
      throw new MojoExecutionException("Error while building project", e); 
     } 
    } 

} 

主成分のカップルがここにあります

  • requiresDependencyResolutionは我々が依存関係を必要とすることにMavenを伝えます実行前に解決される。この場合は、RUNTIMEに指定して、すべてのコンパイルとランタイムの依存関係を解決しました。もちろん、それをResolutionScopeに設定することができます。あなたは欲しい。
  • プロジェクトビルダーには、@Component注釈が挿入されています。
  • デフォルトビルドリクエストは、現在のMavenセッションのパラメータでビルドされています。現在のプロジェクトを明示的にnullに設定し直す必要があります。そうしないと何も起こりません。
  • あなたが MavenProjectへのアクセス権を持っている場合、あなたはそれからなど、開発者のように、それについてあなたが望むすべての情報を印刷することができ

あなたは依存関係(直接および推移)を印刷したい場合は、意志ビルド依頼にsetResolveDependencies(true)も呼び出す必要があります。そうしないと、ビルドされたプロジェクトには埋め込まれません。

関連する問題