从日食自动完成中“隐藏”一个maven工件

时间:2015-07-07 16:14:35

标签: java eclipse maven

由于我甚至不想开始进入的原因..我有一个maven层次结构,看起来像下面的那个。简而言之,除了一个需要commonslang2的古老工件外,一切都需要commonslang3。

我们对编译或运行时没有任何问题,依赖项按预期工作。我们面临的挑战是发展时间。

我们希望确保团队中的每个人都使用commonslang3 API,但偶尔(因为古代工件和Eclipse自动建议),有人不小心使用了commonslang2 API。

通常情况下,我们只会在POM中强制使用所需的版本,但是commonslang是一种特殊的雪花。 comonslang2和commonslang3之间的包签名发生了变化,这意味着如果排除旧库,我们就会遇到编译失败。如,

  • org.apache.commons.lang3.StringUtils
  • org.apache.commons.lang.StringUtils

我的问题是,我如何配置maven / Eclipse,在编译期间根据需要使用commonlang2但是不能在Eclipse类autosuggest列表中填充它?我想要的最终状态是有人输入'stringuti'+ ctrl + space,他们看到的唯一选项是commonslang3。 我知道每个开发人员都可以通过(Window-> Preferences)删除单个类 - > Java->外观 - >类型过滤器)但这不是一个可行的解决方案,原因有两个:1)这是一个拥有频繁更改资源的大型团队... 2)我需要一个整个工件删除,就像在数百个类中一样。

示例树:

MyWar
  -- MyModuleJar1
     -- ...
  -- MyModuleJar2
     -- LibA
        -- commonslang
        -- ... 
     -- LibB
        -- commonslang3   
        -- ...
     -- LibC
        -- commonslang3
        -- ...
     -- ...

2 个答案:

答案 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。