以编程方式从风暴螺栓中杀死拓扑时编译错误:对象和包具有相同的名称

Posted

技术标签:

【中文标题】以编程方式从风暴螺栓中杀死拓扑时编译错误:对象和包具有相同的名称【英文标题】:Compile Error when killing topology from storm bolt programatically: object and package with same name 【发布时间】:2018-12-31 18:19:41 【问题描述】:

我正在寻找如何在我的 scala 项目中的风暴 1.2.1 中从风暴螺栓中终止拓扑。 从这个answer,我写了下面的代码来做到这一点:

  private def shutTopology()
    import org.apache.storm.utils.Utils
    import org.apache.storm.utils.NimbusClient
    val conf = Utils.readStormConfig
    val nimbusClient = 
NimbusClient.getConfiguredClient(conf).getClient
    nimbusClient.deactivate(topology_name)
  

但它给出了以下错误:val conf = Utils.readStormConfig,如何解决这个问题?

错误:(46, 17) 包守护进程包含同名的对象和包:nimbus

其中一个需要从类路径中删除

val conf = Utils.readStormConfig

我通过sbtmvn 编译得到了上述错误。我看到了一些关于这个 here 的描述,但对于如何解决这个问题没有太多帮助。

编辑:

基于答案here,我能够使用以下scalac 选项在sbt 中编译它:

"-Yresolve-term-conflict:object"

我仍然无法完成此操作,如何在使用 maven 编译时解决此错误。

【问题讨论】:

【参考方案1】:

根据here 的回答,我能够使用以下 scalac 选项在 sbt 中编译它:

"-Yresolve-term-conflict:object"

为了使用 maven 编译它,我按照建议 here 对 pom.xml 进行了以下更改:

<configuration>
      <scalaVersion>$scala.version</scalaVersion>
      <args>
        <arg>-Yresolve-term-conflict:object</arg> //this was added
      </args>
      <jvmArgs>
        <jvmArg>-Xms2048m</jvmArg>
        <jvmArg>-Xmx4096m</jvmArg>
      </jvmArgs>
</configuration>

【讨论】:

以上是关于以编程方式从风暴螺栓中杀死拓扑时编译错误:对象和包具有相同的名称的主要内容,如果未能解决你的问题,请参考以下文章

当我将拓扑提交给风暴时,我从“ lein”中得到一个错误]]

风暴,螺栓延迟和总延迟之间的巨大差异?

在风暴螺栓中重新加载属性

如何为每个循环发出不同的元组并在风暴螺栓的单个字段方法中声明?

使风暴喷口等待螺栓准备好

为 Apache Storm 上的 Bolt 添加重试机制