如何在maven依赖项上运行插件

时间:2013-10-03 04:37:16

标签: maven

我正在设置一个(java)maven项目,该项目依赖于Maven仓库中的库(Jettison等)。反过来,Jettison依赖于stax。我需要在stax上运行一个工具(Jar Jar Links)(以更改命名空间)。如何更改maven项目中传递依赖的规则?我的传递依赖项使用copy-dependencies目标包含在我的目标文件夹中(我假设通常是这样做的)。我假设这是插件将在传递生成的工件上运行的点。

额外的问题:此时我不需要这个,但我如何改变传递依赖中的?我可以使用mvn dependency:sources获取源代码的jar,但是,从那里,我不确定正确的方法是什么。

1 个答案:

答案 0 :(得分:-1)

胜利!

似乎至少有两个人对Maven比我更无能为力所以让我在报告这篇帖子底部的修复之前解释一下我正在做的事情(剧透警告:它看起来像是JarJar中的一个bug)。

Android使用Java但缺少很多java核心(特别是javax类)。 Android DEX编译器(将.jars转换为Android .dex文件)甚至不允许您在java。*或javax。*命名空间中编译东西,因为它(通常)会破坏东西。但是,在某些(许多)情况下,您可能希望包含一些例程 - 特别是因为现有库使用它们。最具传奇色彩的是StAX,这就是为什么谷歌发布了一个如何包含它的例子here in the Dalvik repo's wiki。该示例使用JarJar ...与ant。当您不使用repo时,传递依赖性不是真正的问题,因此它们不会在wiki中被解决。

我能够让JarJar在Maven的源代码上运行,但是没有更改依赖项(和传递依赖项)中的命名空间,这是毫无价值的。因此我的问题。

我认为copy-dependencies插件可能对于...复制依赖项并在此过程中运行转换插件很有用。复制依赖关系被称为官方“Maven in 5分钟”文档中的一个步骤,因此它似乎是一个良好的开端,但也许编写官方文档的人不知道如何使用它:-)。无论哪种方式,它都没有帮助 - 我没有简单的方法可以看到它在复制时变换罐子。

使用Maven的详细喷射,我能够看到Jar Jar 实际上正确处理我的罐子......然后抛出结果。它会将我的工件中的传递依赖项中的转换类与我的其余代码打包在一起,但相反,它会“排除”它们。 Jar Jar参数是basically undocumented,大多数标签甚至没有在文档中列出,但我能找到的所有示例都使用带有通配符的部分,告诉它要保留哪些类。至少我认为(想想?)这就是该部分的用途。相反,它似乎随机扔出东西。基本上,该部分被破坏了。例如,我有:

            <keep>
              <pattern>com.example.**</pattern>
            </keep>

...认为这会保留以com.example开头的类。错误。它保留了它想要的任何东西。我在那个地方尝试了一百万件事,直到有人工作:

            <keep>
              <pattern>*.**</pattern>
            </keep>

这只保留我想要的类 - 它更新的类和它没有触及的类的原始。请注意,**甚至不起作用。这是JarJar插件的1.8版本(我发现的最常用的版本)。

回去工作。