2012-06-25 28 views
4

鑑於Maven工件(groupId:artifactId:版本),我如何以編程方式查詢其依賴關係? (我不需要實際檢索任何工件,只需要依賴信息。)以編程方式檢索Maven依賴關係圖

編輯即可添加我想在Maven插件之外執行此操作,並且我想構建一個依賴關係圖。

回答

2

如果您使用的是Maven插件(即:延長AbstractMojo),你可以做到以下幾點:

/** 
    * @parameter expression="${project}" 
    */ 
    private org.apache.maven.project.MavenProject mavenProject; 

    List<org.apache.maven.model.Dependency> depmgtdeps = mavenProject.getDependencyManagement().getDependencies(); 

這將會給你它檢測到的實際依賴的對象。 MavenProject類還有其他一些方法,用於讀取各種與pom相關的東西。不過,我不相信這個插件可以工作,或者至少,我從來沒有試過這樣做。

+0

謝謝 - 這實際上不是Maven插件,而是獨立應用程序。也許還有另一種方法來獲得MavenProject ... –

+0

我不確定是否有。有一個構造函數需要一個Model,但是你真的沒有一個很好的方法來獲得其中的一個。你能提供更多關於你想要完成的事情嗎?可能是另一種做你想做的事情的方式。 – Michael

+0

我想構建各種Maven artefact的依賴關係圖來測試驅動器的圖形佈局算法。 –

1

以下Groovy腳本使用ivy解決依賴

import groovy.xml.NamespaceBuilder 

// Main program 
// ============ 
def ant = new AntBuilder() 
def ivy = NamespaceBuilder.newInstance(ant, "antlib:org.apache.ivy.ant") 

ivy.resolve(
    inline:true, 
    keep:true, 
    conf:"default", 
    organisation:"org.springframework", 
    module:"spring-core", 
    revision:"3.1.1.RELEASE", 
) 

ivy.report(toDir:"reports") 

生成一個HTML報告一個graphml文件:

|-- report.groovy 
|-- reports 
| |-- ivy-report.css 
| |-- org.springframework-spring-core-caller-default.graphml 
| `-- org.springframework-spring-core-caller-default.html