jar包部署到Linux系统报错no main manifest attribute in... XX.jar

java Springboot项目在本地运行正常,打成jar包放上服务器后,用命令启动后报错: no main manifest attribute in… XX.jar,以上错误需要在原工程pom文件中加入如下配置,重新打包上传,启动成功

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                    <mainClass>com.zsm.alibaba.ServiceRegistryApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述

Linnux环境下相关问题

### JDK 17 JAR时出现 'no main manifest attribute' 错误的解决方案 当使用 JDK 17 进行 JAR 文件打时,如果遇到 `no main manifest attribute` 的错误提示,则表明在构建过程中未正确设置 MANIFEST.MF 文件中的主类属性 (Main-Class)。以下是针对该问题的具体分析与解决方法: #### 1. **理解错误原因** 此错误的核心在于缺少 MANIFEST.MF 文件或者其中未定义 `Main-Class` 属性。JVM 在运行 JAR 文件时依赖MANIFEST.MF 中指定的入口点来定位程序的主要执行类[^1]。 #### 2. **手动创建并配置 MANIFEST.MF 文件** 为了修复这一问题,可以按照以下方式手动创建和配置 MANIFEST.MF 文件: - 创建一个新的文本文件命名为 `MANIFEST.MF`。 - 编辑其内容如下所示: ```plaintext Manifest-Version: 1.0 Built-By: YourName Created-By: Java Packager Build-Jdk: 17 Main-Class: com.example.MainClass ``` 注意替换 `com.example.MainClass` 为你实际项目的主类名称[^3]。 #### 3. **通过命令行工具重新打 JAR 文件** 完成上述操作之后,利用标准命令将项目源码编译成字节码,并最终生成带有更新后的 MANIFEST.MF 的新版本 JAR 文件: ```bash javac -d out src/com/example/MainClass.java jar cfm app.jar META-INF/MANIFEST.MF -C out . ``` 此处 `-C out .` 参数用于指示从输出目录加载所有已编译好的 `.class` 文件[^5]。 #### 4. **集成开发环境(IDE)自动化处理** 对于现代 IDE 如 IntelliJ IDEA 或 Eclipse,在它们内部已经内置支持自动生成含必要元数据信息的标准可执行 JAR 文件的功能。只需确保选定了正确的模块以及对应的启动器类作为目标即可自动填充所需字段[^2]。 #### 5. **调整 Dockerfile 配置适应更高版本 JVM 要求** 如果是部署至容器化环境中还需同步升级基础镜像以匹配所使用的 JDK 版本号。例如切换到基于 OpenJDK 17 的官方镜像: ```dockerfile FROM eclipse-temurin:17-jdk-alpine COPY target/*.jar /app/app.jar ENTRYPOINT ["java", "-Xmx500m", "-jar", "/app/app.jar"] EXPOSE 8168 ``` --- ### 示例代码片段展示完整的流程实现过程 假设存在一个简单的 HelloWorld 应用程序结构如下: ```java // File: src/main/java/com/example/App.java package com.example; public class App { public static void main(String[] args) { System.out.println("Hello World!"); } } ``` 可以通过下面脚本来快速验证整个修正步骤的有效性: ```bash #!/bin/bash # Step 1: Compile source code into bytecode. mkdir -p build/classes && javac -d build/classes src/main/java/com/example/App.java # Step 2: Prepare custom MANIFEST file with specified Main-Class entry point. echo "Manifest-Version: 1.0\nMain-Class: com.example.App" > build/META-INF/MANIFEST.MF # Step 3: Package everything together inside a single executable archive format known as Jar Archive Format. cd build && jar cvmf META-INF/MANIFEST.MF ../output/app.jar -C classes . # Optional step to test execution directly after creation without needing any external dependencies installed locally on machine running this script. java -jar ../output/app.jar ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值