我正在研究maven生命周期扩展类,需要检查给定项目的dependencyManagement块中列出的pom(bom)的坐标细节。我需要能够在扩展类中重写的afterProjectsRead方法中实现这一点。我理解
明确地说,给定maven项目中的依赖管理块如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>some.project</groupId>
<artifactId>some-project-bom</artifactId>
<version>0.1-SNAPSHOT</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
我的maven lifecycle extension类正试图做到这一点:
@Override
public void afterProjectsRead(MavenSession session) {
MavenProject proj = session.getCurrentProject();
DependencyManagement depMgmt = proj.getDependencyManagement();
for (Dependency dep : depMgmt.getDependencies()) {
System.out.println(dep.getArtifactId() + ":" + dep.getVersion());
}
}
以获取参考pom(bom)的坐标细节
我当时希望获得pom(bom)本身的groupId、artifactId和版本,但这些信息已经被某些项目bom中实际列出的依赖项所取代。xml。因此,我正在检索pom(bom)xml文件中指定的依赖项的坐标细节。
这可能吗?也许是通过MavenSession对象?
我找到了解决方案——从我正在开发的生命周期扩展类中,我能够通过传入的MavenSession对象检索MavenProject。从MavenProject中,我能够获得原始模型对象,并在导入和替换之前从模型对象中检索pom的DependencyManagement对象。
@Override
public void afterProjectsRead(MavenSession session) {
MavenProject proj = session.getProject();
depMgmt = proj.getOriginalModel().getDependencyManagement();
for (Dependency dep : depMgmt.getDependencies()) {
System.out.println("found this artifact in dependencyMgmt section-> "
+ dep.getArtifactId() + ":" + dep.getVersion() + "\n");
}
}
最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个
我有一个多普姆专家项目。在我的pom根中,我有一个父pom和依赖管理,具有Spring依赖关系。 在我的人工战争中,我有这个pom。xml: 我的问题是,在父pom中有一个spring旧版本(4.1.8),在我的根pom中,我使用4.3.3版本和工件spring框架bom。在“我的依赖项列表”中,项目显示为“父项”pom版本。如何优先考虑pom根的依赖关系?
问题内容: 是否有任何预先存在的Maven插件或命令来更新POM中的依赖关系?示例:(如果这是在我的POM中) 有没有可以运行的命令或插件来将依赖关系更新为: 问题答案: 尝试使用maven-versions-plugin,尤其是versions:use-latest-versions目标。
假设<code>B:1.0.1,但是子项目应该依赖于<code>A:1.2(有意覆盖传递依赖性)。 很容易发现 ,并从它的所有子POM中删除样板文件。不幸的是,下面的设置导致在最终的工件中使用两个版本:< code>A:1.0.1(作为< code>B:1.0.1的依赖项)和< code>A:1.0.2(来自父pom中的显式声明)。 如何在所有子项目中强制使用< code>A:1.0.2版本,并在
我目前在一个项目中工作,该项目包括大约12个子项目。 每个子项目都包含一个POM,该POM单独构建依赖关系。 上游子项目包括下游子项目作为依赖项,其方式与包含对log4j: 这似乎对我们管用。 然而,今天,经过11个月的开发,我决定重温这十几个POM文件,并考虑到重构。 我随后发现了和标记,并开始怀疑我的Maven项目策略是否“正确”。 重构我的POM,使最上层的POM(一个Web WAR项目)变
我创建了一个Maven项目(可重用库),该项目有许多依赖项(编译时和运行时),它们也可以过渡地依赖于其他许多依赖项。在maven中,我可以在pom中添加依赖项。xml及其可传递依赖关系将自动处理。所以,我将毫无问题地运行。 现在,我有一个非Maven(基于Ant的)项目,上面创建的库(Maven Lib)将使用它。 在这种情况下,运行时间