noclass def在kafa testproducer示例中发现错误

epfja78i  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(303)

我正在尝试执行以下示例:https://cwiki.apache.org/confluence/display/kafka/0.8.0+producer+example
我用maven构建了这个项目,构建成功了。但是在执行jar时,我得到了以下错误。

[root@sandbox target]# java -cp kafka_code-1.0-SNAPSHOT.jar com.kafka.TestProducer 2
Exception in thread "main" java.lang.NoClassDefFoundError: kafka/producer/ProducerConfig
        at com.kafka.TestProducer.main(TestProducer.java:19)
Caused by: java.lang.ClassNotFoundException: kafka.producer.ProducerConfig
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 1 more

但是,我的pom.xml看起来像:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.kafka</groupId>
  <artifactId>kafka_code</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>kafka_code</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
 <dependency>
   <groupId>org.apache.kafka</groupId>
   <artifactId>kafka_2.9.2</artifactId>
   <version>0.8.1.1</version>
   <scope>compile</scope>
   <exclusions>
     <exclusion>
       <artifactId>jmxri</artifactId>
       <groupId>com.sun.jmx</groupId>
     </exclusion>
     <exclusion>
       <artifactId>jms</artifactId>
       <groupId>javax.jms</groupId>
     </exclusion>
     <exclusion>
       <artifactId>jmxtools</artifactId>
       <groupId>com.sun.jdmk</groupId>
     </exclusion>
   </exclusions>
 </dependency>
 <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.8.0</version>
 </dependency>
<dependency>
        <groupId>com.101tec</groupId>
 </dependency>
<dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.3</version>
</dependency>
<dependency>
        <groupId>com.yammer.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>2.2.0</version>
</dependency>
<dependency>
        <groupId>com.github.ja-fra.zk-configuration</groupId>
        <artifactId>zkconfig</artifactId>
        <version>0.1.0</version>
</dependency>
</dependencies>
</project>
enter code here
imzjd6km

imzjd6km1#

kafka_code-1.0-snapshot.jar不是随依赖项一起构建的。有两种方法可以做这件事。要么将所有依赖项添加到库文件夹中,并在运行时将其作为类路径输入提供,要么将所有依赖类放入一个包中。您可以使用程序集插件将所有依赖项构建为一个。将程序集插件依赖项添加到pom.xml中的构建阶段。使用mvn构建jarassembly:single. 这将创建一个带有依赖项的jar,您可以使用它来运行kafka producer。

<build>
           <plugins>
              <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
              </plugin>
            </plugins>
         </build>

相关问题