Maven - 在运行时查找依赖项

4
我希望能够在运行时确定依赖项的版本以及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轻松解析该文件,而无需进行任何/太多工作。
这是一种hack方法,但看起来很有前途。
沃尔特

你想要实现什么?你正在构建一个Maven工具吗?如果你只是想了解特定项目的情况,可以执行“mvn dependency:tree”命令。如果你在Bash中操作,请执行“mvn dependency:tree|grep runtime”命令。 - manuel aldana
2个回答

2
我将使用mvn dependency:tree插件生成一个包含依赖树的文本文件,然后解析它并从中创建依赖关系树/图。我将获取构件的范围、groupId、artifactId、版本和其父级。
我已经成功地实现了这种类型的查找,它只是简单地使用缩进解析输出,并组织依赖项,没有任何花哨的东西。由于分隔符是“:”,因此很容易解析出构件、组、版本和范围。
沃尔特

0

谢谢,这看起来像是之前建议的Maven Embedder的想法。我可能最终会使用这两个想法。 - Walter White
我不确定Maven Embedder是你要找的东西(请参见我对其他答案的评论),但你会看到的 :) - Pascal Thivent
Pascal,我认为你离我想要的最近。在查看API后,似乎需要一些工作。我正在思考确定解决方案之前需要完成什么任务。我只需要知道我部署到服务器上的内容。将依赖树保存为文本文件可能更容易,然后通过分隔groupId、artifactId和version来解析它,并根据缩进构建层次结构。 - Walter White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接