我希望能够确定我在运行时运行依赖项的版本以及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并轻松解析该文件,而无需进行任何/大量工作。
这是一个黑客,但看起来很有希望。
沃尔特
答案 0 :(得分:2)
我将使用mvn dependency:tree插件生成带有依赖关系树的文本文件。然后我将解析它并从中创建依赖树/图。我将获得工件的范围,groupId,artifactId,版本及其父级。
我成功实现了这种类型的查找,它只需要依赖输出,解析它并使用缩进来组织依赖关系,没什么特别的。由于分隔符是:。
,因此可以轻松解析工件,组,版本和范围沃尔特
答案 1 :(得分:0)
Maven当然有这样的API。看看org.apache.maven.project.MavenProject
。但是,说实话,我认为创建MavenProject
实例并不容易。源代码在这里会很有帮助,请查看示例MavenProjectTest
或Maven Plugin API(实际上,此任务在Mojo
中实现的内容非常多,非常简单)以获得一些指导。
我建议在Maven Mailing Lists上搜索或提出这个问题,org.apache.maven.dev适合恕我直言。