当前位置: 首页 > 知识库问答 >
问题:

StormKafka:爪哇。lang.NoClassDefFoundError:com/google/common/base/Strings

韩明德
2023-03-14

我试图运行一个StormLocalCluster使用Storm核心1.0.2和kafka-spout 1.0.2。

我的pom文件如下所示

  <dependencies>
  <!-- Storm Dependency -->
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-core</artifactId>
        <version>1.0.2</version>
        <scope>provided</scope>
    </dependency>

    <!-- Storm Kafka Dependency -->
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-kafka</artifactId>
        <version>1.0.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
            </exclusion>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
 .....
 </dependencies>
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <plugins>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.walmartlabs.midas.storm.Topology</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>java</executable>
                <includeProjectDependencies>true</includeProjectDependencies>
                <includePluginDependencies>false</includePluginDependencies>
                <classpathScope>compile</classpathScope>
                <mainClass>${storm.topology}</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

我使用以下命令在本地运行Storm集群。

mvn package
storm  jar target/myproject-0.1-SNAPSHOT-jar-with-dependencies.jar com.company.project.storm.Topology

我得到以下例外

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Strings
    at org.apache.storm.kafka.KafkaSpout.declareOutputFields(KafkaSpout.java:184)
    at org.apache.storm.topology.TopologyBuilder.getComponentCommon(TopologyBuilder.java:431)
    at org.apache.storm.topology.TopologyBuilder.createTopology(TopologyBuilder.java:135)
    at com.walmartlabs.midas.storm.Topology.submitLocalTopology(Topology.java:50)
    at com.walmartlabs.midas.storm.Topology.main(Topology.java:75)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Strings
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

谷歌的共同依赖性是storm kafka工件。我已经将storm kafka的作用域设置为默认值,所以我相信它的所有依赖项都应该构建在我的jar中。

如果我用一个简单的喷口代替KafkaSpout,只是读取一些文件,一切正常。我相信在包装罐子时,我没有包装StormKafka神器的所有依赖项。这里怎么了?

共有2个答案

酆翔宇
2023-03-14

我得到了这个问题,并通过添加如下依赖项(ps:guava.jar版本是storm1.0.3使用的16.0.1)解决了这个问题。顺便说一下,我们可以参考storm starter使用的番石榴版本。

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
            <!--<version>16.0.1</version>-->
        </dependency>
柯捷
2023-03-14

https://github.com/apache/storm/tree/v1.0.2/external/storm-kafka#using-storm-kafka-with-different-versions-of-kafka

Storm 1.0.2将工件“kafka_[scala_version]”的范围更改为“提供”,这意味着您需要将其添加为依赖项。这是为了在scala版本和/或kafka版本上具有组合的灵活性。

 类似资料:
  • 问题内容: 我的应用抛出错误。不知道为什么,因为我检查了16.0.1确实包含该类。根据我的研究,看来这是一个错误吗? 我也有此代码供参考,尽管我认为这不是问题: 我的应用程序正在使用Restlet APISpark: 运行并访问应用程序的REST api时,它将引发以下错误: 问题答案: 使用扩展名时,检索到的番石榴依赖项具有版本。 它包含在使用以下maven配置从头创建的应用程序中: 我集成了您

  • 问题内容: 当我执行以下代码时: 我遇到以下错误: `错误:[Ljava.lang.StackTraceElement; @ 80f4cb 线程“主”中的异常java.lang.NoClassDefFoundError:com / google / common / base / Function` 有人可以帮我找到解决方案或原因吗? 问题答案: 我遇到了同样的问题,最后我发现我忘记添加selen

  • 问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf

  • 我已经红色了多篇文章和讨论,但我仍然有一些不确定性:我不确定是否应该使用或任何其他类型来存储预订-在“在线预订”的意义上(因此来自不同国家/时区的参与者需要在时间线上的同一时刻会面)。我倾向于使用,因为DB和Backend设置为UTC,并且由于传入的“创建预订”json消息包含ISO 8601(带偏移量)start DateTime 让我们采用以下设置:1.数据库(UTC、Oracle、MSSQL

  • 我的问题是关于cucumber特性文件的并行执行。在Selenium Java中,可以通过一个runner类并行运行多个cucumber特性文件吗? 我尝试过不同的方法,但都没有成功。

  • 当我运行程序而不是找到骑士之旅时,我收到了一个StackOverflow错误。任何想法是什么导致了这一点,以及我如何改变我的代码,实际上找到骑士之旅,并摆脱这个错误。项目是为我的CS280课程,并在周五到期,请帮助。谢谢!!