2014-02-05 3 views
0

Я обход графа зависимостей моего основного П в плагине, используя org.apache.maven.shared.dependency.graph.DependencyGraphBuilder.buildDependencyGraph() и полученный org.apache.maven.shared.dependency.graph.DependencyNodeКак получить POM собственности от org.apache.maven.artifact.Artifact

Однако, как только я достигаю зависимость с specific groupId Мне нужно получить доступ к свойству maven, объявленному в его pom. Как я могу получить доступ к pom через артефакт или объект DependencyNode?

+0

Вы пишете плагин или чего вы пытаетесь достичь? – khmarbaise

+0

Да. поэтому у него есть тег maven-plugin – Hilikus

+0

Я отредактировал вопрос, чтобы сделать это ясно – Hilikus

ответ

0

Позвольте мне ответить на этот заводной стиль .... (используя сценарий, написанный для GMaven)

Я буду использовать в качестве примера Javascript зависимостей, предоставляемые webjars.org, в котором я хочу, чтобы прочитать (несчастливо по желанию , как я только что обнаружил) requirejs.

/** 
* Read the requirejs property in pom (if possible) or in file (if not available in pom) 
* @param log the logger injected into the groovy script 
* @param project the MavenProject object (well, not really, but anyway a good implementor) 
* @param session the MavenSession 
* @param artifact the artifact in which we want to read the requirejs property 
*/ 
def readRequireJSPropertyOf(def log, def project, def session, def artifact) { 
    // This is the hardest part : the session gives access (through MavenSession#getContainer()) to the PlexusContainer, which allows lookup of various components 
    MavenProjectBuilder projectBuilder = session.container.lookup(MavenProjectBuilder.class); 
    // Now we have a MavenProjectBuilder, just build a MavenProject object 
    MavenProject artifactProject = projectBuilder.buildFromRepository(artifact, project.remoteArtifactRepositories, session.localRepository); 
    log.debug "loaded project ${artifactProject}. Now reading its requirejs property" 
    // And read that property from artifact POM 
    def requireValue = artifactProject.properties["requirejs"]; 
    return requireValue 
} 

Опять же, я не могу не подчеркнуть того, как доступ к PlexusContainer спас день, кроме знания о том, что MavenProjectBuilder компонент где-то существует. Обратите внимание, что этот компонент устарел и доступен через артефакт maven-compat.

Смежные вопросы