【maven】成功生成jar包,提示找不到主类?

本文详细解析了使用Maven构建项目时遇到的“找不到或无法加载主类”及“包中没有主清单属性”错误,通过调整pom文件中的依赖范围和添加主类transformer,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

  使用maven构建zookeeper项目,完成一个简单的创建组的实例,代码调试完成,使用mvn clean install成功打包得到了jar包,但是在执行时发现使用java -cp target/XXX.jar com.App却提示“找不到或者无法加载主类”,用java -jar对jar包查看,提示“包中没有主清单属性”。

解决办法:

  首先在网上查询了很多相关的问题,逐一进行了排查,包括环境变量的配置、CLASSPATH中有没有当前路径.、主类中有没有main函数、包名是否正确等等。

  最后发现,环境配置都没有问题,并且只有当程序里使用到了第三方jar包时才会出现问题,如果只是一个简单的Hello World程序是可以正常运行的。在经过相关的测试以后,发现问题还是在pom文件上。

  首先,对于pom文件中的每个依赖,scope的属性值要注意,它主要管理依赖的部署。目前可以使用5个值:

  • compile,缺省值,适用于所有阶段,会随着项目一起发布。
  • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
  • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

  其次,这里报错的主要原因是:pom.xml文件中没有加入mainclass的transformer,如下修改pom文件后,程序运行正确,可以把它作为一个模板运用到其他maven项目中。

<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>com.hadoop.sgz</groupId>
  <artifactId>zkStudy</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>zkStudy</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.5.4-beta</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
  </dependencies>
<build>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                        <goal>shade</goal>
                </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.hadoop.sgz.App</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
            </execution>
        </executions>
     </plugin>
  </plugins>
</build>
</project>

转载于:https://www.cnblogs.com/gzshan/p/10861457.html

### 解决方案 在 IntelliJ IDEA 中打 JAR 后运行时出现 `No main manifest attribute` 或者 `not found` 的问题,通常是因为构建过程中未正确指定或者 MANIFEST 文件中的属性缺失。以下是具体的解决方案: #### 1. 配置 Artifact 确保已正确配置项目的 artifact 设置。如果之前存在旧的 artifact 缓存,则可能导致依赖项加载错误[^1]。 - 打开 **File -> Project Structure -> Artifacts**。 - 如果已有 artifact,请先删除它,然后点击加号按钮 (+),选择 **JAR -> From modules with dependencies**。 - 在弹出窗口中,设置模块的Main Class),并确认路径无误。 - 勾选选项 “Include in project build”,以便每次编译项目时自动更新此 JAR 文件。 #### 2. 检查 Main-Class 属性 MANIFEST.MF 文件需要含正确的 `Main-Class` 条目来定义程序入口点。如果没有这个条目,就会抛出 `No main manifest attribute` 错误。 - 转到上述创建好的 artifact 页面,在右侧可以看到 MANIFEST 配置部分。 - 确认已经选择了合适的作为启动入口,并保存更改。 #### 3. 使用 Maven 构建工具 对于基于 Spring Boot 的应用或其他复杂结构的应用来说,推荐利用 Maven 插件完成打操作而不是手动调整 IDE settings[^2]。 - 修改 pom.xml 文件加入 spring-boot-maven-plugin 插件支持: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` - 接下来执行命令 mvn clean package 即可生成最终可执行 jar 文件位于 target 目录下。 #### 4. 处理 ClassNotFoundException 和 MethodNotFoundError 当遇到似异常时,可能意味着某些必要的库文件未能被打入最终产物之中[^3]。此时应仔细核查外部依赖是否全部被纳入其中;另外也要注意不同版本间的兼容性问题以免引入冲突。 通过以上方法应该能够有效解决大部分关于 intellij idea 下制作 java 应用程序独立部署时常遇见的各种典型难题。 ```bash mvn clean package -DskipTests=true java -jar your-application-name.jar ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值