Java 如何在maven管理的框架中修补子组件?

Java 如何在maven管理的框架中修补子组件?,java,maven-2,jar,nexus,mule,Java,Maven 2,Jar,Nexus,Mule,我需要为这个bug()修补mule的mule transport jms子组件。“修复”很简单,但让我烦恼的是将补丁组件部署到我的本地maven repo(由Nexus管理),并让它继续与mule的所有其他组件配合使用 我想要的是将我新修补的mule transport jms标记为版本号2.2.1-patched,并让我的esb组件依赖于此以及其他mule组件(例如mule core),它们仍然设置为版本2.2.1。因为mule transport jms pom(部分)的内容如下: <

我需要为这个bug()修补mule的mule transport jms子组件。“修复”很简单,但让我烦恼的是将补丁组件部署到我的本地maven repo(由Nexus管理),并让它继续与mule的所有其他组件配合使用

我想要的是将我新修补的mule transport jms标记为版本号2.2.1-patched,并让我的esb组件依赖于此以及其他mule组件(例如mule core),它们仍然设置为版本2.2.1。因为mule transport jms pom(部分)的内容如下:

<parent>
    <groupId>org.mule.transports</groupId>
    <artifactId>mule-transports</artifactId>
    <version>2.2.1</version>
</parent>
<artifactId>mule-transport-jms</artifactId>
<packaging>bundle</packaging>
<name>JMS Transport</name>
<description>A Mule transport for Jms Connectivity.</description>
<parent>
    <groupId>org.mule.transports</groupId>
    <artifactId>mule-transports</artifactId>
    <version>2.2.1</version>
</parent>
<artifactId>mule-transport-jms</artifactId>
<version>2.2.1-patched</version>
<packaging>bundle</packaging>
<name>JMS Transport (ZFP patched)</name>
<description>A Mule transport for Jms Connectivity.</description>

org.mule.transports
骡子运输
2.2.1
骡子运输
捆
JMS传输
用于Jms连接的Mule传输。
有许多依赖于2.2.1版本的相互依赖性。将父版本(如上所示)更改为2.2.1-patched会破坏一切,添加一个版本标记,使其看起来像这样:

<parent>
    <groupId>org.mule.transports</groupId>
    <artifactId>mule-transports</artifactId>
    <version>2.2.1</version>
</parent>
<artifactId>mule-transport-jms</artifactId>
<packaging>bundle</packaging>
<name>JMS Transport</name>
<description>A Mule transport for Jms Connectivity.</description>
<parent>
    <groupId>org.mule.transports</groupId>
    <artifactId>mule-transports</artifactId>
    <version>2.2.1</version>
</parent>
<artifactId>mule-transport-jms</artifactId>
<version>2.2.1-patched</version>
<packaging>bundle</packaging>
<name>JMS Transport (ZFP patched)</name>
<description>A Mule transport for Jms Connectivity.</description>

org.mule.transports
骡子运输
2.2.1
骡子运输
2.2.1-修补
捆
JMS传输(ZFP补丁)
用于Jms连接的Mule传输。
断开许多可能在父级pom中声明的依赖项(在此项目中任何地方都没有提到那些失败的依赖项)

当mule transport jms v2.2.1被请求时,我可能会攻击Nexus以始终检索我的补丁版本,但这是肮脏的。我真的希望能够准确地指定在我的客户端pom中使用哪个GAV,并且在升级时(假设错误在v3.0中得到正确修复),只需将我的客户端pom更新到3.0.0版本,而我的修补版2.2.1 jar被忽略,并且不需要对nexus进行任何黑客攻击。显然,我也希望避免检查每个mule组件,更新它们的POM,并将它们全部重新部署为2.2.1补丁


有什么想法吗

您应该能够在pom中明确地设置对修补版本的
mule transport jms
的依赖关系。因为它比标准版本更接近,所以它将覆盖标准版本并使用您的版本。您可能需要将依赖项添加到插件声明中。这描述了如何配置具有依赖项的插件


如果这不起作用,您能提供更多关于如何使用修补版本的信息吗?

应用修补程序并将整个
mule transport
重建为
2.2.1版本-修补
可能是最好的解决方案。但我不知道这代表了多少努力(我指的是构建时间)

另一个选择实际上是构建一个补丁版本的
mule transport jms
模块和仅依赖于它的项目。要轻松找到这些项目,您可以使用reactor来识别相关项目:

  • 如果您使用的是maven 2.0.x

    $ mvn reactor:make-dependents -Dmake.folders=mule-transport-jms
    
  • 如果您使用的是maven 2.1+

    $ mvn -amd -pl mule-transport-jms
    
然后更新这些项目的pom,使其指向修补版本的
mule transport jms
,并重复maven命令来构建它们


我只是不知道这是否会比整个构建过程花费更少的时间。

这实际上只是一个maven的问题,而不是Mule的问题。正确的方法不是使用“黑客”版本,而是在回购协议中使用另一个带有限定符的版本(就像使用“补丁”一样)。接下来,检查maven的可传递依赖项(使用mvn依赖项:树&依赖项:列出目标),并确保:

  • 已声明并使用修补的依赖项,以及
  • 原始未修补的依赖项已从依赖项图中排除

  • 在玩了一段时间后,我得出结论,任何形式的maven Muning都太像艰苦的工作了——它可能很糟糕,但我决定让nexus repo routing负责在与未打补丁的jar相同的GAV下交付打补丁的jar。不过谢谢你的建议。。。