【发布时间】:2019-01-24 02:23:55
【问题描述】:
在 Maven 3.x 中,我如何获取项目的所有依赖项,包括自定义 maven 扩展中的传递(不使用 Aether)
目前我有这个:
@Component(role = AbstractMavenLifecycleParticipant.class, hint = "Test")
public class sampleExtension extends AbstractMavenLifecycleParticipant implements LogEnabled {
private Logger logger;
@Override
public void afterSessionStart(MavenSession session)
throws MavenExecutionException {
this.logger.info("Starting afterSessionStart()");
}
@Override
public void afterProjectsRead(MavenSession session)
throws MavenExecutionException {
MavenProject pr = session.getCurrentProject();
List dependencies = pr.getDependencies();
this.logger.info("Project name and Size of dependencies: " + pr.getArtifactId() + " : " + dependencies.size());
}
@Override
public void enableLogging(Logger logger) {
this.logger = logger;
}
}
我正在构建这个扩展 jar 并将其放在 $Maven_home/lib/ext 中。我选择了一个随机的 maven 项目(我们称之为“abc”)并运行命令: mvn clean install ,它从日志中显示依赖项的数量为 13。就好像我在 'abc' 上运行 mvn dependency:copy-dependencies 时,我看到 200 多个依赖项已复制到目标文件夹。
最终,我要做的是,在扩展类中获取一个项目的所有依赖项,并将其复制到一个文件夹中。
我做错了什么吗? 请注意,我对这一切都不熟悉。非常感谢任何帮助。
【问题讨论】:
-
getDependencies()方法可能只返回直接依赖项而不是传递依赖项。为什么要重新发明轮子而不只是使用依赖项插件? -
是的,阅读它 getDependencies() 只返回直接。我不想重新发明,我可以重用插件,但是我如何使用依赖插件来获取我的扩展类中的所有依赖项?
-
如果你想在课堂上使用它,我猜
getArtifacts()就是你想要的(因为它也返回传递依赖)。如果将工件复制到文件夹是您想要实现的目标,我仍然不明白您为什么不使用依赖插件来做到这一点。 -
我试过这个: session.getCurrentProject().getArtifacts() 我看到集合的大小是 0 。我不确定为什么会这样。那么我想做的是,当创建一个构建作业时,我想在后台获取所有依赖项。我不能做 "mvn dependency:copy-dependencies" ,我想把它作为 Maven 扩展的一部分。这个可以吗?
-
@DrHopfen 对此有什么想法吗?如何在我的自定义 Maven 扩展中使用依赖插件?非常感谢您的帮助
标签: java maven-3 maven-dependency maven-extension