4

我需要为这个错误(http://www.mulesoft.org/jira/browse/MULE-3983)修补 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>

有许多相互依赖关系依赖于 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>
<version>2.2.1-patched</version>
<packaging>bundle</packaging>
<name>JMS Transport (ZFP patched)</name>
<description>A Mule transport for Jms Connectivity.</description>

破坏了一些可能在父级 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-patched。

有什么想法吗?

4

3 回答 3

1

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

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

于 2009-10-02T13:47:58.707 回答
1

应用你的补丁并重建整个mule-transport版本2.2.1-patched可能是最好的解决方案。但我不知道这代表了多少努力(我的意思是构建时间)。

另一种选择确实是构建mule-transport-jms模块的修补版本和仅依赖它的项目。为了轻松找到这些项目,您可以使用反应器来识别依赖项目:

  • 如果您使用的是 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 命令来构建它们。

我只是不知道这是否会比整个构建更耗时。

于 2009-10-02T13:58:42.927 回答
0

这实际上只是一个专家问题,而不是 Mule 的问题。正确的方法不是使用“破解”版本,而是使用带有限定符的 repo 中的另一个版本(就像您使用 'patched' 所做的那样)。接下来,检查 maven 的传递依赖项(使用 mvn dependency:tree & dependency:list 目标)并确保:

  1. 声明并使用修补的依赖项,并且
  2. 原始未修补的依赖关系从依赖关系图中排除。
于 2010-01-19T16:38:36.637 回答