执行JAR包,提示.jar中没有主清单属性

maven
修改pom.xml,project 节点中添加如下内容:

如果有问题,注意是不是复制过去后格式问题和含有其它特别字符

    <build>
    <finalName>atcotmp.jar</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.2.0</version>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <mainClass>com.atco.App</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
        ...
    </build>

在尝试启动 Java JAR 时,如果遇到错误提示“cron.jar没有主清单属性”,这表明该 JAR 文件的 `MANIFEST.MF` 文件中缺少 `Main-Class` 属性定义。Java 在运行 JAR 时依赖这一属性来确定程序入口点。 ### 错误原因 当使用命令 `java -jar cron.jar` 试图运行 JAR 文件时,Java 运行时环境会检查 JAR 文件的 `MANIFEST.MF` 文件以查找 `Main-Class` 条目。此条目指定了含 `main` 方法的类,这是程序执行的起点。如果未找到此条目,则会抛出错误“没有主清单属性”[^1]。 ### 解决方法 #### 方法一:手动编辑 MANIFEST.MF 文件 1. **解压 JAR 文件** 使用以下命令将 JAR 文件解压到一个目录: ```bash mkdir cron_unpacked cd cron_unpacked jar xf ../cron.jar ``` 2. **编辑 MANIFEST.MF 文件** 打开 `META-INF/MANIFEST.MF` 文件,并添加 `Main-Class` 条目。确保格式正确,例如: ``` Manifest-Version: 1.0 Main-Class: com.example.MainClass Created-By: 1.8.0_292 (Oracle Corporation) ``` 其中 `com.example.MainClass` 应替换为实际含 `main` 方法的类名。 3. **重新打 JAR 文件** 修改完成后,使用以下命令重新打 JAR 文件: ```bash jar cfm ../cron_fixed.jar META-INF/MANIFEST.MF . ``` 4. **验证新 JAR 文件** 使用 `java -jar` 命令测试新生成的 JAR 文件是否可以正常运行: ```bash java -jar cron_fixed.jar ``` #### 方法二:使用命令行指定主类 如果不希望修改 JAR 文件的内容,也可以在运行时通过 `-cp` 参数指定类路径并显式调用主类。这种方式适用于临时测试或调试。 ```bash java -cp cron.jar com.example.MainClass ``` 其中 `com.example.MainClass` 是含 `main` 方法的类名。 #### 方法三:使用构建工具自动配置主类 如果你使用 Maven 或 Gradle 等构建工具,可以在构建配置文件中指定主类,以便自动生成带有正确 `Main-Class` 的 JAR 文件。 ##### Maven 配置示例 在 `pom.xml` 中添加以下插件配置: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.example.MainClass</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> ``` ##### Gradle 配置示例 在 `build.gradle` 中添加以下任务: ```groovy jar { manifest { attributes( 'Main-Class': 'com.example.MainClass' ) } } ``` ### 注意事项 - 确保 `Main-Class` 指定的类确实存在,并且该类具有标准的 `main` 方法签名:`public static void main(String[] args)`。 - 如果不确定哪个类是主类,可以通过反编译工具查看 JAR 文件内容,或者查阅项目的源代码文档。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值