如何确保 Maven 插件是线程安全的

问题描述 投票:0回答:1

我的团队开发的 Maven 插件很少, 并且这些插件没有标记@threadSafe。 我已经运行了大约 50 个作业,没有发现不一致的情况,但我想知道是否有方法以编程方式验证这一点。

需要寻找哪些东西会使插件对多线程不安全

maven-3 maven-plugin parallel-builds
1个回答
0
投票

基于 https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3,只要不存在

共享的可变状态,就可以认为是 
threadSafe魔力的不同实例——例如对具有可变内容的对象的静态引用。

构建单个模块时,会创建 mojo 的实例,并在单个线程上调用其

execute()
方法一次。

OTOH,如果正在构建两个模块,并且都不依赖于另一个模块,则会创建单独的 mojo 实例(每个模块一个),并且它们的

execute()
方法可能会在不同线程上同时调用 - 如果
-T
使用了 cli 标志,相关的 mojos 是
threadSafe

上面的链接列出了一些需要检查的具体事项:

  • 检查插件/插件代码中的所有静态字段/变量是否存在线程问题。
  • 您可能要特别注意
    java.text.Format
    子类的静态成员变量(
    NumberFormat
    DateFormat
    等),它们大多数都不是线程安全的,不能作为静态变量共享。
  • 检查任何神经丛
    components.xml
    ;如果定义的组件是单例,那么它们需要是线程安全的。
  • 检查是否存在已知受污染的库。
  • 检查任何其他第三方库的线程安全性。最后一项可能有点困难,但查询邮件列表可以让你走得很远。

理论上,两个不同的模块构建仍然可以通过例如写入同一个文件。这似乎不是

threadSafe
注释标签所关心的……也许是因为在实践中,绝大多数模块构建仅在自己的模块目录中写入文件。

© www.soinside.com 2019 - 2024. All rights reserved.