在 Linux 下用 Java 打包应用,常见有几种方式,取决于你是普通 Java 项目、Spring Boot,还是想做成可直接运行的 Linux 服务。下面按常见场景说明。
jar 命令打包javac -d out src/com/example/*.java
jar cvf app.jar -C out .
java -jar app.jar
如果你的程序有
main方法,需要在META-INF/MANIFEST.MF中指定:
Main-Class: com.example.Main
mvn clean package
生成:
target/app.jar
若想生成可执行 jar(包含所有依赖):
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
mvn clean package assembly:single
mvn clean package
生成:
target/your-app.jar
java -jar your-app.jar
java -jar your-app.jar --spring.profiles.active=prod
sudo vim /etc/systemd/system/myapp.service
内容示例:
[Unit]
Description=My Java App
After=network.target
[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
SuccessExitStatus=143
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
FROM openjdk:17-jdk-slim
COPY target/app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
docker build -t myapp .
docker run -d -p 8080:8080 myapp
可使用:
示例(jpackage):
jpackage --name myapp --input target --main-jar app.jar
| 场景 | 推荐方式 |
|---|---|
| 学习/测试 | java -jar |
| Web 服务 | Spring Boot + systemd |
| 生产部署 | Docker |
| 无 JVM 依赖 | GraalVM / jpackage |
如果你愿意,可以告诉我:
我可以直接给你一套完整打包方案。