注入 Maven 插件依赖项运行时
Posted
技术标签:
【中文标题】注入 Maven 插件依赖项运行时【英文标题】:Inject Maven Plugin Dependencies runtime 【发布时间】:2021-11-19 01:34:28 【问题描述】:是否可以在运行时在 maven 插件和/或 gradle 插件中注入依赖项。我知道您可以在 pom.xml 中的插件中添加依赖项,但我希望这些依赖项是运行时的,因为我希望能够注入类似这样的东西
mvn <plugin>:<goal> <arg=pass dependencies here)
这个插件不在 repo pom.xml 中,所以我想运行 mvn cli 在项目之外执行这个插件。有人做过吗
Add Plugin Dependencies Runtime
【问题讨论】:
你为什么要这样做? 它是一个自定义插件,我在屏幕截图中使用了一个不好的spring boot plugin
示例。我不知道这是否可行,如果它需要更改插件代码,我可以接受。我可以自定义插件代码。我只需要能够将不同的依赖项和/或升级的依赖项版本传递给插件,因为我必须在 100 个 repo 中运行它,我无法更新每个项目的 pom。如果它需要更改插件代码,如果您知道是否有任何开源插件可以做到这一点,如果您能指出该插件,我将不胜感激
听起来像是 X-Y 问题。 Maven 的方式是在你的数百个存储库中修复它,并正确地执行它,而以其他方式执行它会给你带来更多的问题。您可能想查看 XSLT 来操作 pom 的
【参考方案1】:
您可以定义一个附加属性,例如:
<properties>
<plugin.dependency.version>someDefaultVersion</plugin.dependency.version>
</properties>
并在插件中使用
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>$spring-boot.verision</version>
<dependencies>
<dependency>
<groupId>groupid</groupId>
<artifactId>artifactId</artifactId>
<version>$plugin.dependency.version</version>
</dependency>
</dependencies>
</plugin>
通过这样做,您应该能够使用以下命令通过命令行定义插件的依赖关系:
mvn org.springframework.boot:spring-boot-maven-plugin:yourGoal -Dplugin.dependency.version=runtimeDepenencyVersion
【讨论】:
这不适合我,我猜 Spring Boot 插件是一个不好的例子,它是一个不同的插件。并且该插件并未添加到所有项目中。我有 1000 个 repo,我想在其中运行这个插件目标,但具有不同的运行时依赖项。为了让您的解决方案正常工作,我必须将此插件添加到每个项目中。 我也刚刚意识到,我无法在 settings.xml 中添加插件 这些存储库是否共享同一个 pom 父级?如果是这样,那么插件只能添加到父 pom 中,这样所有项目都会从中受益。既然你说你可以自定义插件代码,我假设你也可以发布它。另一种选择是发布同一插件的一堆不同版本,每个版本都有不同的依赖项。然后你可以运行你的插件:mvn yourPluginGroupId:yourPluginName:specificVersionOfThePluginWhichHasNeededDependencies:yourGoal
【参考方案2】:
使用 标签来执行此操作。示例如下:
<dependency>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>version</version>
<scope>runtime</scope>
</dependency>
【讨论】:
这行不通,因为我必须在 pom 中添加此依赖项,我无法为 1000 多个项目执行此操作,并且依赖项可以更改或升级,因此我需要它以方便将来升级和增强。 数千个项目?这到底是怎么回事?以上是关于注入 Maven 插件依赖项运行时的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Kubernetes 的容器在 runsc (gVisor) 上作为 Docker 中的运行时运行时会失败?
DirectX 11:运行简单的 DirectX 应用程序时运行时崩溃
Gradle 依赖项未列出本地 maven jar 的依赖项
应用程序在调试时运行时如何禁用 Firebase 崩溃报告?