2012-02-14 132 views
0

在下面的塞纳里奥Maven的依赖特定的类

我的包裹外部 jar文件(阅读依赖我没有控制权),并在被暴露在RMI服务包此。

我希望我的服务接口也作为maven依赖项导出,但它将返回依赖项中定义的类,这意味着依赖项本身将用作我的服务接口的依赖项。

不幸的是,原始的jar文件包含许多与我公开的服务无关的类。

是否有可能依赖maven中该jar文件中的几个类(可能通过提取和重新包装几个相关的类)?

  • uberbig_irrelevant.jar
    • com.uberbig.beans < - 需要这个包或者它几类。
    • com.uberbig.everythingElse

服务项目包括所有uberbig罐子。但是暴露了一个服务BeanService,它有一个返回com.uberbig.beans.IntrestingLightWeightSerialiasbleBean的实例的调用。

服务界面的项目需要有一个bean定义,看起来像

interface BeanFetcher { 
    public IntrestingLightWeightSerialiasbleBean fetchBeanById(long beanId); 
} 

所以最好我serviceInterface等jar文件将只包括BeanFetcher接口。 IntrestingLightWeightSerialiasbleBean的定义以及IntrestingLightWeightSerialiasbleBean的任何直接依赖关系。

该项目在内部使用,不会公开显示,因此只要重新封装的bean定义是二进制的,并且与外部jar文件可以进行搜索匹配,就不应该重新打包问题。

有什么建议吗?

可能相关的问题Maven depend on project - no jar but classes

也许我可以用自相依东西:maven-dependency-plugin的副本部分,但我还没有想出如何做到这一点。

回答

1

我认为你的插件是正确的,但不是目标。您应该使用dependency:unpack

您应该能够使用包含过滤器来只提取您需要的类,然后将它们重新打包到您自己的jar中。 (服务接口jar,如果你在服务接口项目中这样做的话,但你可以设置一个单独的项目。)

1

创建您自己的重新打包的jar并将其放入您的本地回购。并希望你已经确定了所有的依赖关系,考虑反思等。IMO并不值得。

您可能可以通过使用ProGuard /等自动执行此操作(相关风险增加)。去掉未使用的类等等。这也可以在你自己的工件上完成,例如,通过jarjar/onejar /等来制作一个全合一的jar。

+0

所以将有可能使用maven重新包装你知道吗? – Wes 2012-02-14 12:08:12