Maven - 在运行时查找依赖项

时间:2009-12-30 01:41:21

标签: java maven-2

我希望能够确定我在运行时运行依赖项的版本以及Web应用程序本身的版本。

我部署的每个Web应用程序都打包了一个pom.xml,我可以从中读取,这部分是微不足道的。接下来的部分是不费力地解析pom。

随着Web应用程序的运行,我希望能够了解我的版本以及我的依赖项的版本。

理想情况下,我想做类似的事情:

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和version,然后通过缩进级别确定结构。

如果我这样做,我可以导出到XML而不是文本吗?然后,我可以使用JAXB并轻松解析该文件,而无需进行任何/大量工作。

这是一个黑客,但看起来很有希望。

沃尔特

2 个答案:

答案 0 :(得分:2)

我将使用mvn dependency:tree插件生成带有依赖关系树的文本文件。然后我将解析它并从中创建依赖树/图。我将获得工件的范围,groupId,artifactId,版本及其父级。

我成功实现了这种类型的查找,它只需要依赖输出,解析它并使用缩进来组织依赖关系,没什么特别的。由于分隔符是:。

,因此可以轻松解析工件,组,版本和范围

沃尔特

答案 1 :(得分:0)

Maven当然有这样的API。看看org.apache.maven.project.MavenProject。但是,说实话,我认为创建MavenProject实例并不容易。源代码在这里会很有帮助,请查看示例MavenProjectTestMaven Plugin API(实际上,此任务在Mojo中实现的内容非常多,非常简单)以获得一些指导。

我建议在Maven Mailing Lists上搜索或提出这个问题,org.apache.maven.dev适合恕我直言。