Maven依赖于特定的课程

时间:2012-02-14 12:01:10

标签: maven dependency-management

在以下senario中

我正在包装外部 jar文件(读取我无法控制的依赖项)并将其包装在服务中以通过RMI公开。

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

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

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

  • uberbig_irrelevant.jar
    • com.uberbig.beans< - 需要此软件包或其中的几个类。
    • com.uberbig.everythingElse

服务项目包括所有uberbig jar。但是暴露了一个服务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的复制部分,但我还没弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:1)

创建您自己的重新包装的jar并将其放入您当地的仓库中。并希望你实际上已经确定了所有的依赖关系,考虑了反思等等.IMO并不值得。

您可以使用ProGuard /等自动执行此操作(相关的风险增加)。拉出未使用的类等。这也可以在你自己的工件上完成,例如,通过jarjar / onejar / etc创建一个多功能的jar。

答案 1 :(得分:1)

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

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