Sea*_*oyd 5 plexus maven-3 maven
我需要用我自己的实现替换一些 Maven 默认功能,我正在寻找一种干净的方法来做到这一点。
我已经org.apache.maven.repository.internal.DefaultVersionRangeResolver使用 component.xml扩展并注册了我的扩展组件,如下所示:
<component-set>
<components>
<component>
<role>org.sonatype.aether.impl.VersionRangeResolver</role>
<role-hint>default</role-hint>
<implementation>com.my.custom.VersionRangeResolver
</implementation>
<isolated-realm>false</isolated-realm>
<requirements>
<requirement>
<role>org.sonatype.aether.spi.log.Logger</role>
<role-hint />
<field-name>logger</field-name>
</requirement>
<requirement>
<role>org.sonatype.aether.spi.log.Logger</role>
<role-hint />
<field-name>logger2</field-name>
</requirement>
<requirement>
<role>org.sonatype.aether.impl.MetadataResolver</role>
<role-hint />
<field-name>metadataResolver</field-name>
</requirement>
</requirements>
</component>
</components>
</component-set>
Run Code Online (Sandbox Code Playgroud)
我已经在我的本地 repo 中安装了包含它的项目,我在另一个项目的 pom.xml 中像这样引用它:
<build>
<extensions>
<extension>
<groupId>my.groupId</groupId>
<artifactId>maven-version-resolver</artifactId>
<version>SNAPSHOT</version>
</extension>
</extensions>
</build>
Run Code Online (Sandbox Code Playgroud)
但是,我的神器没有使用。当我在构建中运行这个小的 GMaven groovy 脚本时:
session.container.getComponentDescriptorList(
'org.sonatype.aether.impl.VersionRangeResolver'
).each{
println "Role Hint: ${it.roleHint}, implementation: ${it.implementation}" ;
}
Run Code Online (Sandbox Code Playgroud)
它向我展示了默认实现和我自己的实现,都带有“默认”提示。那么我该如何解决这个问题呢?
这是一个很晚的答案,但我希望它能帮助那些在 maven-core 中遇到类似问题的人。
使用 Maven 3.3.1,可以使用在项目根目录中定义的自定义核心扩展,并且不需要对命令参数或 Maven 安装进行任何修改:https ://maven.apache.org/docs/3.3.1/release- Notes.html#Core_Extensions。
我遇到了和您一样的问题,需要自定义版本范围分辨率并设法使其正常工作。我的第一个工作实现标记在这里:https://github.com/splatch/maven-osgi-resolver/tree/3.3.9-a。我将代码向前推了一点,但此标签包含自定义版本范围处理所需的所有内容。
一般来说,魔鬼在于细节 - 您必须使用 plexus 注释并在META-INF/maven/extension.xml导出包中使用 进行声明plexus-components.xml,否则它将无法工作。
| 归档时间: |
|
| 查看次数: |
1660 次 |
| 最近记录: |