Ubuntu Java打包发布全流程指南
在打包前,需确保Ubuntu系统已安装Java开发工具包(JDK)和构建工具(Maven/Gradle),这是Java项目编译与打包的基础。
sudo apt update
sudo apt install openjdk-11-jdk # 或 openjdk-21-jdk
安装完成后,验证JDK版本:java -version # 输出JDK版本信息即表示成功
sudo apt install maven
mvn -v # 验证安装(输出Maven版本及JDK信息)
sudo apt install gradle
gradle -v # 验证安装
若项目采用Maven管理依赖,可通过pom.xml配置快速生成可执行JAR包。
pom.xml:pom.xml中添加maven-jar-plugin(指定主类)和maven-dependency-plugin(复制依赖到lib目录),确保生成的JAR包含所有依赖:<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.example.MainClass</mainClass> <!-- 替换为你的主类全限定名 -->
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
clean清除旧构建,package编译并打包):mvn clean package -DskipTests # -DskipTests跳过测试(可选)
target目录下生成可执行JAR包(如your-project-1.0-SNAPSHOT.jar),包含编译后的代码和依赖库。若项目采用Gradle管理,通过build.gradle配置生成可执行JAR包。
build.gradle:build.gradle中添加application插件(指定主类),并配置jar任务(复制依赖到JAR内):plugins {
id 'java'
id 'application'
}
group 'com.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 11 // 匹配JDK版本
repositories {
mavenCentral()
}
dependencies {
// 添加项目依赖(如testImplementation 'junit:junit:4.12')
}
mainClassName = 'com.example.MainClass' // 替换为你的主类全限定名
jar {
manifest {
attributes 'Main-Class': mainClassName
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
gradle clean build
build/libs目录下生成可执行JAR包(如your-project-1.0-SNAPSHOT.jar)。若需要将Java应用打包为原生安装包(如.deb、.exe),可使用JDK自带的jpackage工具(适用于JDK 14及以上版本)。
jpackage配置(如jpackage.properties),指定应用名称、主类、输出路径等:name=MyJavaApp
main-jar=target/your-project-1.0-SNAPSHOT.jar # 替换为你的JAR路径
main-class=com.example.MainClass # 替换为你的主类
output=output
type=deb # 生成.deb安装包(Windows用exe,macOS用dmg)
jpackage @jpackage.properties
output目录下生成原生安装包(如MyJavaApp_1.0_amd64.deb),可直接安装到Ubuntu系统。无论使用哪种打包方式,最终需将生成的JAR包或安装包部署到目标环境(如Ubuntu服务器)。
scp命令将打包文件传输到服务器(本地→服务器):scp target/your-project-1.0-SNAPSHOT.jar user@your_server_ip:/path/to/deploy
java -jar /path/to/deploy/your-project-1.0-SNAPSHOT.jar
若需后台运行(守护进程),可添加nohup和&:nohup java -jar /path/to/deploy/your-project-1.0-SNAPSHOT.jar > app.log 2>&1 &
(app.log为日志文件,记录应用输出)若需要跨平台部署或隔离环境,可将Java应用打包为Docker镜像。
Dockerfile,定义镜像基础(如OpenJDK)、复制JAR包、暴露端口:FROM openjdk:11-jdk-slim # 使用轻量级OpenJDK镜像
WORKDIR /app
COPY target/your-project-1.0-SNAPSHOT.jar /app/app.jar # 替换为你的JAR路径
EXPOSE 8080 # 暴露应用端口(根据实际情况调整)
CMD ["java", "-jar", "app.jar"] # 启动命令
docker build -t my-java-app .
docker run -p 8080:8080 my-java-app # 将容器8080端口映射到主机8080端口
通过以上步骤,可在Ubuntu系统上完成Java项目的打包与发布,根据需求选择合适的打包方式(JAR、原生安装包、Docker镜像),实现应用的快速部署与运行。