2012-02-14 35 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