所以我想使用maven版本范围,但是当前版本解析的规则不符合我的要求。是否有任何方法,可能从现有的maven插件扩展,以便我可以覆盖要从作为依赖版本选择的范围中的哪个版本?
例如,让我们说依赖项具有以下范围:
[1.0.0, 2.0.0)
目前,这可能会解决到不需要的版本甚至是快照(Maven中有issue这个并且仍然在进行中)
我想知道是否有任何方法可以查看上述范围的可用候选版本列表,然后选择我需要的版本。这是不是可以使用maven插件而不直接运行插件,因此它将依赖关系解析为正常构建的一部分,例如:
mvn clean verify
我不想使用maven版本插件。我们有近50个微服务,我们希望自动获取向后兼容版本,否则每次开发人员进行一些小改动时,他们都必须针对所有应用程序运行maven版本插件。
我在maven中找到DefaultVersionRangeResolver
,任何提示或想法如何编写我自己的版本范围解析器并将其包含在maven中?关于这些内容的文档并不是很清楚。
由于
答案 0 :(得分:0)
我不认为编写自己的版本范围解析器是明智的。你能做什么:
mvn clean deploy
您说mvn versions:update-releases ... clean deploy
。如果你的项目不紧密耦合,那么自动更新可能是不必要的,并且可能会使开发人员感到困惑 - 由于自动更改组件神秘地引入了一些错误,他们的构建突然中断。
答案 1 :(得分:0)
我将回答我找到的解决方案。所以我们决定从像4.0.0这样的高版本开始,这样我们的maven存储库中的那些版本就没有SNAPSHOT。但是,似乎maven中版本范围的依赖性解析有时会起作用并且不可靠。
对于那些仍想要覆盖maven行为的人,我在挖掘maven代码后找到了方法。
您可以按如下方式创建课程:
@Named
@Component( role = VersionRangeResolver.class )
public class SemVerRangeResolver
implements VersionRangeResolver, Service
{
//The content can be copied and pasted from org.apache.maven.repository.internal.DefaultVersionRangeResolver
}
创建此类后,您需要创建一个名为“components.xml”的文件并将其放在\src\main\resources\META-INF\plexus\components.xml
<?xml version="1.0" encoding="UTF-8"?>
<component-set>
<components>
<component>
<role>org.eclipse.aether.impl.VersionRangeResolver</role>
<role-hint>default</role-hint>
<implementation>com.yourcomp.dependency.SemVerRangeResolver</implementation>
<description />
<isolated-realm>false</isolated-realm>
<requirements>
<requirement>
<role>org.eclipse.aether.spi.log.LoggerFactory</role>
<role-hint />
<field-name>logger</field-name>
</requirement>
<requirement>
<role>org.eclipse.aether.impl.MetadataResolver</role>
<role-hint />
<field-name>metadataResolver</field-name>
</requirement>
<requirement>
<role>org.eclipse.aether.impl.SyncContextFactory</role>
<role-hint />
<field-name>syncContextFactory</field-name>
</requirement>
<requirement>
<role>org.eclipse.aether.impl.RepositoryEventDispatcher</role>
<role-hint />
<field-name>repositoryEventDispatcher</field-name>
</requirement>
</requirements>
</component>
</components>
</component-set>
然后创建一个jar文件并将其放在{MAVEN_HOME}/lib/ext
这将覆盖默认的maven范围依赖项解析程序,您可以更改规则以应用semver规则