springboot打jar包,部署到linux云服务器,运行报错:no main manifest attribute

本文讲述了如何在前后端分离项目中,通过Maven打包,避免测试错误并部署到云服务器。遇到Java-jar部署问题时,作者发现缺少打包工具和mainmanifestattribute,最后解决了跨域问题。

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


 

1.任务:前后端分离项目部署到云服务器
2.打后端jar包是使用的maven,首先防止项目测试时有错误代码,将test 点击蓝色小闪电skip跳过一下,双击package进行打包

3. 在Xshell进行部署

使用nohup java -jar部署时,确实返回了线程号,但是使用lsof -i:8080查看8080端口下的进程,却无法查到。

此时就想到直接使用java -jar去部署

但是报了no main manifest attribute

4. 在本地jar包所在目录输入cmd

输入命令 
java -jar permission_system-1.0-SNAPSHOT.jar 

java -jar 接自己的jar包名
发现仍然无法启动

启动成功应该是下面这个界面

5. 如果你不是这个界面,就去看一下你后台项目的pom.xml是否导了打包工具,我就是没有这个打包工具的原因,哭死,因为我前端部署成功了,所以一致以为是跨域问题。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
### 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 ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值