Staging Artifacts
Maven deployers require a set of staged artifacts. You must configure your build
tool of choice to place all artifacts into a staged directory following Maven’s default layout. For many deployers it’s
just enough to stage POM files and production JARs. Be aware that publication to Maven Central requires additional JARs
such as a -sources.jar and -javadoc.jar.
Maven
The following pom.xml file shows the minimum set of XML elements required in a POM for publication to Maven Central, as well
as plugin configuration to generate all required artifacts.
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.acme</groupId>
    <artifactId>app</artifactId>
    <version>1.0.0</version>
    <name>app</name>
    <description>Sample application</description>
    <url>https://github.com/aalmiray/app</url>
    <inceptionYear>2021</inceptionYear>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.release>11</maven.compiler.release>
    </properties>
    <licenses>
        <license>
            <name>Apache-2.0</name>
            <url>https://spdx.org/licenses/Apache-2.0.html</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <developers>
        <developer>
            <id>aalmiray</id>
            <name>Andres Almiray</name>
        </developer>
    </developers>
    <scm>
        <connection>scm:git:https://github.com/aalmiray/app.git</connection>
        <developerConnection>scm:git:https://github.com/aalmiray/app.git</developerConnection>
        <url>https://github.com/aalmiray/app.git</url>
        <tag>HEAD</tag>
    </scm>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>3.1.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.13.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.6.3</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <profiles>
        <profile>
            <id>publication</id>
            <properties>
                <altDeploymentRepository>local::file:./target/staging-deploy</altDeploymentRepository>
            </properties>
            <build>
                <defaultGoal>deploy</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>Invoke the following command to stage artifacts to a local directory
$ mvn -PpublicationResulting in the following file structure
target/staging-deploy/
└── com
    └── acme
        └── app
            ├── 1.0.0
            │   ├── app-1.0.0-javadoc.jar
            │   ├── app-1.0.0-javadoc.jar.md5
            │   ├── app-1.0.0-javadoc.jar.sha1
            │   ├── app-1.0.0-sources.jar
            │   ├── app-1.0.0-sources.jar.md5
            │   ├── app-1.0.0-sources.jar.sha1
            │   ├── app-1.0.0.jar
            │   ├── app-1.0.0.jar.md5
            │   ├── app-1.0.0.jar.sha1
            │   ├── app-1.0.0.pom
            │   ├── app-1.0.0.pom.md5
            │   └── app-1.0.0.pom.sha1
            ├── maven-metadata.xml
            ├── maven-metadata.xml.md5
            └── maven-metadata.xml.sha1Gradle
The following build.gradle file shows the minimum configuration required for publication to Maven Central
plugins {
    id 'java-library'
    id 'maven-publish'
    id 'org.jreleaser' version '1.22.0-SNAPSHOT'
}
java {
    withJavadocJar()
    withSourcesJar()
}
publishing {
    publications {
        maven(MavenPublication) {
            groupId = 'com.acme'
            artifactId = 'app'
            from components.java
            pom {
                name = 'app'
                description = 'Sample application'
                url = 'https://github.com/aalmiray/app'
                inceptionYear = '2021'
                licenses {
                    license {
                        name = 'Apache-2.0'
                        url = 'https://spdx.org/licenses/Apache-2.0.html'
                    }
                }
                developers {
                    developer {
                        id = 'aalmiray'
                        name = 'Andres Almiray'
                    }
                }
                scm {
                    connection = 'scm:git:https://github.com/aalmiray/app.git'
                    developerConnection = 'scm:git:ssh://github.com/aalmiray/app.git'
                    url = 'http://github.com/aalmiray/app'
                }
            }
        }
    }
    repositories {
        maven {
            url = layout.buildDirectory.dir('staging-deploy')
        }
    }
}Invoke the following command to stage artifacts to a local directory
$ ./gradlew publishResulting in the following file structure
build/staging-deploy/
└── com
    └── acme
        └── app
            ├── 1.0.0
            │   ├── app-1.0.0-javadoc.jar
            │   ├── app-1.0.0-javadoc.jar.md5
            │   ├── app-1.0.0-javadoc.jar.sha1
            │   ├── app-1.0.0-javadoc.jar.sha256
            │   ├── app-1.0.0-javadoc.jar.sha512
            │   ├── app-1.0.0-sources.jar
            │   ├── app-1.0.0-sources.jar.md5
            │   ├── app-1.0.0-sources.jar.sha1
            │   ├── app-1.0.0-sources.jar.sha256
            │   ├── app-1.0.0-sources.jar.sha512
            │   ├── app-1.0.0.jar
            │   ├── app-1.0.0.jar.md5
            │   ├── app-1.0.0.jar.sha1
            │   ├── app-1.0.0.jar.sha256
            │   ├── app-1.0.0.jar.sha512
            │   ├── app-1.0.0.pom
            │   ├── app-1.0.0.pom.md5
            │   ├── app-1.0.0.pom.sha1
            │   ├── app-1.0.0.pom.sha256
            │   └── app-1.0.0.pom.sha512
            ├── maven-metadata.xml
            ├── maven-metadata.xml.md5
            ├── maven-metadata.xml.sha1
            ├── maven-metadata.xml.sha256
            └── maven-metadata.xml.sha512