2009-12-30 3 views
3

Я хотел бы иметь возможность определить, какие версии я запускаю зависимость во время выполнения, а также версию самого веб-приложения.Maven - зависимостей поиска во время выполнения

Каждое веб-приложение, которое я развертываю, упаковано с pom.xml, который я могу прочитать, эта часть тривиальна. Следующая часть - синтаксическая разборка без особых усилий.

Как работает веб-приложение, я хочу уметь понять, какая версия я есть, и какие версии имеют мои зависимости.

В идеале я хотел бы сделать что-то вроде:

MavenPom pom = new MavenPom(webApplicationPomInputStream); 
pom.getVersion(); 
pom.getArtifactId(); 
pom.getGroupId(); 

for(Dependency dependency:pom.getDependencies()) 
{ 
    dependency.getVersion(); 
    dependency.getArtifactId(); 
    dependency.getGroupId(); 
} 

Должен ли я просто использовать XPath обозначения здесь, или есть библиотека, я могу позвонить, чтобы сделать этот тип вещи?

После этих сообщений я думаю, что самый быстрый/самый надежный способ - создать текстовый файл с деревом зависимостей в нем: mvn dependency: tree. Затем я проанализирую текстовый файл, отделяю groupId, artifactId и версию, а затем определяю структуру по уровню отступа.

Если я это сделаю, могу ли я экспортировать в XML вместо текста? Затем я могу использовать JAXB и легко анализировать этот файл, не делая никакой работы.

Это взлом, но выглядит многообещающим.

Walter

+0

Что вы пытаетесь достичь? вы строите инструмент maven? если вы просто хотите узнать его для конкретного проекта, сделайте «mvn dependecy: tree». если вы работаете над bash do 'mvn dependency: tree | grep runtime' –

ответ

2

Я просто использую mvn dependency: tree plugin для создания текстового файла с деревом зависимостей. Затем я проанализирую это и создаю из этого дерево/график зависимостей. Я получу масштаб артефакта, groupId, artifactId, версию и ее родителя.

Я успешно реализовал этот тип поиска, он просто принимает вывод зависимости, анализирует его и организует зависимости, просто используя отступы, ничего необычного. Артефакт, группа, версия и область действия легко анализируются, так как разделитель:.

Walter

0

У Maven есть, конечно, такой API. Посмотрите на org.apache.maven.project.MavenProject. Но, честно говоря, я не думаю, что будет легко создать экземпляр MavenProject. Исходный код будет полезен здесь, проверьте, например, MavenProjectTest или, возможно, Maven Plugin API (на самом деле, эта задача была бы намного, очень много, проще для достижения от Mojo) для некоторых рекомендаций.

Я предлагаю найти или задать этот вопрос на Maven Mailing Lists, org.apache.maven.dev будет уместен здесь ИМХО.

+0

Спасибо, это похоже на идею Maven Embedder, предложенную выше. Я, вероятно, в конечном итоге использую обе эти идеи. –

+0

Я не уверен, что Maven Embedder - это то, что вы ищете (см. Мой комментарий к другому ответу), но вы увидите :) –

+0

Паскаль, я думаю, вы меня ближе всех к тому, что я ищу. Посмотрев на API, похоже, что есть немного работы. Я пытаюсь понять, что именно мне нужно выполнить, прежде чем определять решение. Мне просто нужно знать, что я развернул на сервере. Возможно, было бы легче сохранить дерево зависимостей в виде текстового файла, проанализировать его при разделении groupId, artifactId и версии, а затем построить иерархию на основе отступа. –