强制旧maven插件版本的任何有效理由?

时间:2015-02-15 11:13:06

标签: java maven project pom.xml

我参与了一个大型遗留项目,我注意到在项目根目录中我们明确强制使用某些maven插件版本。

我已经读过关于“maven way'在我看来,这是违反这种方式 - 强制版本而不是从superpom继承它们。这是我们在项目中所拥有的一个例子:

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>...</configuration>
            </plugin>

我的问题是 - 强制插件版本的有效理由(如果有的话)是什么。我想知道,因为我经常发现编写的代码没有任何明确的目的,我想知道这是否是这种情况,如果我应该从项目根pom中删除该版本。

事后的想法:在这site他们说:

  

宣布&#34;正常&#34;内部版本如Junit 3.8.2   这表示为&#34;允许任何内容,但更喜欢3.8.2。&#34;这意味着   当检测到冲突时,允许Maven使用冲突   算法选择最佳版本。如果指定[3.8.2],则为   表示只使用3.8.2而不会使用其他任何内容。

所以这意味着,如果你强制版本确保稳定性,那么你也应该使用[]否则maven可以自由地忽略你的强制版本。

3 个答案:

答案 0 :(得分:3)

最好的方法是仅在公司pom中定义插件版本,当然还要保留这个公司pom的时间,这意味着不时更新插件版本。

这意味着,在任何其他项目中都不需要或者更好地使用不同版本的插件(除了插件中存在这些错误的原因很充分)。

此外,您提供的摘录是一个不良做法的示例,因为应该使用 pluginManagement 来定义插件和/或其配置。

因此,如果一个项目需要一个旧版本的maven插件,那么pom中至少应该有一个注释,它描述了为什么它不使用继承版本。可以链接到适当的JIRA问题......

答案 1 :(得分:1)

正如已经说过的,这可能是出于公司原因 - 使用新版本的插件可能会破坏测试,功能甚至整个产品本身;新版本必须经过彻底测试,高级团队甚至需要讨论它们,因为它可以在很多方面更改产品。

不强制版本会在下一个大型构建期间创建某种不稳定的情况 - 这总是不受欢迎的,开发人员不喜欢随机性:)。 如果您的POM只描述了一个小型的私人项目,甚至可能是一个小型的社区项目,那么你很可能让maven完成所有的版本管理,但对于那些值得的专业产品来说,这几乎是不行的......比如数百个数千甚至数百万货币单位。

答案 2 :(得分:1)

  

强制插件版本的有效理由(如果有的话)是什么。

一个正当理由是保持构建可重复,特别是如果插件的更高版本存在已知问题。这可确保使用特定版本,而不是来自组织父pom的更高版本(或者更糟糕的是,从默认情况下未在任何地方指定版本)。

  

我想知道,因为我经常发现没有任何明确目的的代码,我不知道这是不是这样的情况

在大型代码库中,很有可能确实如此。插件配置可能已从其他地方复制而且包含的版本没有充分理由。

  

如果我应该从项目根目录中删除该版本。

如果在注释或提交消息中没有给出任何理由,并且如果相同的插件在父pom 中指定了版本,如果构建在没有它的情况下仍能正常工作,那么你应该放弃那个版本。

如果没有工作,您应该修复构建或添加注释,说明为什么需要此版本。

相关问题