由于我甚至不想开始进入的原因..我有一个maven层次结构,看起来像下面的那个。简而言之,除了一个需要commonslang2的古老工件外,一切都需要commonslang3。
我们对编译或运行时没有任何问题,依赖项按预期工作。我们面临的挑战是发展时间。
我们希望确保团队中的每个人都使用commonslang3 API,但偶尔(因为古代工件和Eclipse自动建议),有人不小心使用了commonslang2 API。
通常情况下,我们只会在POM中强制使用所需的版本,但是commonslang是一种特殊的雪花。 comonslang2和commonslang3之间的包签名发生了变化,这意味着如果排除旧库,我们就会遇到编译失败。如,
我的问题是,我如何配置maven / Eclipse,在编译期间根据需要使用commonlang2但是不能在Eclipse类autosuggest列表中填充它?我想要的最终状态是有人输入'stringuti'+ ctrl + space,他们看到的唯一选项是commonslang3。 我知道每个开发人员都可以通过(Window-> Preferences)删除单个类 - > Java->外观 - >类型过滤器)但这不是一个可行的解决方案,原因有两个:1)这是一个拥有频繁更改资源的大型团队... 2)我需要一个整个工件删除,就像在数百个类中一样。
示例树:
MyWar
-- MyModuleJar1
-- ...
-- MyModuleJar2
-- LibA
-- commonslang
-- ...
-- LibB
-- commonslang3
-- ...
-- LibC
-- commonslang3
-- ...
-- ...
答案 0 :(得分:1)
在Eclipse中: Window-> Preferences-> Java-> Appearance-> Type Filters
添加org.apache.commons.lang.*
由于您希望影响自动完成(IDE的功能),因此您必须更改IDE中的设置。您可以导出首选项并与团队的其他成员共享。
答案 1 :(得分:0)
除了@JustinKSU提到的类型过滤器之外,你在Eclipse中做的事情并不多。
但是使用Maven,您可以使用Takari to access rules来防止意外包含传递依赖项。当然,这有很多警告,其中一个具有讽刺意味的是必须使用Eclipse JDT编译器而不是普通的javac。