打包与发布
→ 返回构建工具
打包类型
| 格式 | 说明 | 适用场景 |
|---|---|---|
| jar | 普通 Java 归档 | 库、工具 |
| fat jar | 含所有依赖的可执行 jar | 独立运行的应用 |
| war | Web 应用归档 | 部署到 Tomcat 等容器 |
Maven 打包
普通 jar
mvn package # 打包到 target/*.jar
mvn package -DskipTests # 跳过测试Fat Jar(maven-shade-plugin)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>Spring Boot 可执行 Jar
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>mvn package
java -jar target/app.jar发布到仓库
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://nexus.example.com/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://nexus.example.com/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>mvn install # 安装到本地仓库 ~/.m2
mvn deploy # 发布到远程仓库→ 配置私有仓库认证
Gradle 打包
Fat Jar
tasks.jar {
manifest { attributes["Main-Class"] = "com.example.MainKt" }
from(configurations.runtimeClasspath.get().map {
if (it.isDirectory) it else zipTree(it)
})
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}Spring Boot 可执行 Jar
plugins {
id("org.springframework.boot") version "3.2.0"
}./gradlew bootJar发布到仓库
plugins { `maven-publish` }
publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
}
}
repositories {
maven {
url = uri("http://nexus.example.com/repository/maven-releases/")
credentials {
username = project.findProperty("nexusUser") as String?
password = project.findProperty("nexusPassword") as String?
}
}
}
}./gradlew publish→ 配置私有仓库