打包与发布

返回构建工具


打包类型

格式说明适用场景
jar普通 Java 归档库、工具
fat jar含所有依赖的可执行 jar独立运行的应用
warWeb 应用归档部署到 Tomcat 等容器

Maven 打包

查看 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 打包

查看 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

配置私有仓库


相关文档