maven 无法初始化主类包,

6rqinv9w  于 2023-06-21  发布在  Maven
关注(0)|答案(2)|浏览(188)

嗨,我正在学习如何使用Apache Kafka,当我尝试执行我的.jar文件时,我得到了这个错误:
错误:无法初始化主类Kafka.Main原因:java.lang.NoClassDefFoundError:org/apache/Kafka/clients/producer/Producer
我试图检查我的依赖项并更新它们,但我不明白为什么会发生这种情况。
这是我的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org</groupId>
    <artifactId>KafkaApp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>3.4.0</version>
        </dependency>
    </dependencies>
    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>kafka.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
nhjlsmyf

nhjlsmyf1#

您需要使用Shade Plugin而不是JAR插件创建一个可执行的fatJAR。只有这样,您的依赖类(比如KafkaProducer)才会包含在JAR文件中。

1bqhqjot

1bqhqjot2#

另一个答案中提到的Maven Shade Plugin并不是唯一的方法。还有一种手动方法(虽然不推荐),以及在How to Create an Executable JAR with Maven中描述得很好的(更简单的)Apache Maven Assembly Plugin

2.2. Apache Maven组装插件

Apache Maven Assembly Plugin允许用户将项目输出沿着依赖项、模块、站点文档和其他文件聚合到一个可运行的包中。
assembly插件中的主要目标是 single 目标,用于创建所有程序集(所有其他目标都已弃用,并将在未来版本中删除)。
让我们看看 * pom.xml * 中的配置:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-assembly-plugin</artifactId>
   <executions>
       <execution>
           <phase>package</phase>
           <goals>
               <goal>single</goal>
           </goals>
           <configuration>
               <archive>
               <manifest>
                   <mainClass>
                       com.baeldung.executable.ExecutableMavenJar
                   </mainClass>
               </manifest>
               </archive>
               <descriptorRefs>
                   <descriptorRef>jar-with-dependencies</descriptorRef>
               </descriptorRefs>
           </configuration>
       </execution>
  </executions>
</plugin>

与手动方法类似,我们需要提供有关主类的信息。不同之处在于Maven Assembly Plugin会自动将所有必需的依赖项复制到一个 jar 文件中。
在配置代码的 descriptorRefs 部分,我们提供了将添加到项目名称中的名称。
我们的示例中的输出将被命名为 core-java-jar-with-dependencies.jar

*pros-jar文件中的依赖项,仅一个文件
*cons-打包工件的基本控制,例如,没有类重定位支持

相关问题