target/deployInstead of classical deployment to an HTTP(S) server (PUT), or scp or any other file-oriented server, we can easily test maven-deploy-plugin:deploy to deploy to a local directory using altDeploymentRepository parameter with a file: target url (instead of updating pom.xml's project.distributionManagement.repository.idand url):
mvn clean deploy -DaltDeploymentRepository=local::file:target/deploy
$ mvn clean deploy -DaltDeploymentRepository=local::file:target/deploy [INFO] Scanning for projects... [INFO] Njord 0.8.2 session created [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] deploy study root [pom] [INFO] sub projects [pom] [INFO] logging [jar] [INFO] core project classes [jar] [INFO] enterprise java beans [ejb] [INFO] servlet [war] [INFO] ear assembly [ear] [INFO] [INFO] ------------------< org.apache.maven.studies:deploy >------------------- [INFO] Building deploy study root 1.0 [1/7] [INFO] from pom.xml [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] --- clean:3.5.0:clean (default-clean) @ deploy --- [INFO] Deleting /home/herve/dev/maven/sources/studies/deploy/target [INFO] [INFO] --- install:3.1.4:install (default-install) @ deploy --- [INFO] Installing /home/herve/dev/maven/sources/studies/deploy/pom.xml to /home/herve/.m2/repository/org/apache/maven/studies/deploy/1.0/deploy-1.0.pom [INFO] [INFO] --- deploy:3.1.4:deploy (default-deploy) @ deploy --- [INFO] Using alternate deployment repository local::file:target/deploy Uploading to local: file:target/deploy/org/apache/maven/studies/deploy/1.0/deploy-1.0.pom Uploaded to local: file:target/deploy/org/apache/maven/studies/deploy/1.0/deploy-1.0.pom (6.3 kB at 1.3 MB/s) Downloading from local: file:target/deploy/org/apache/maven/studies/deploy/maven-metadata.xml Uploading to local: file:target/deploy/org/apache/maven/studies/deploy/maven-metadata.xml Uploaded to local: file:target/deploy/org/apache/maven/studies/deploy/maven-metadata.xml (306 B at 306 kB/s) [INFO] [INFO] -----------------< org.apache.maven.studies:projects >------------------ [INFO] Building sub projects 1.0 [2/7] [INFO] from projects/pom.xml [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] --- clean:3.5.0:clean (default-clean) @ projects --- [INFO] Deleting /home/herve/dev/maven/sources/studies/deploy/projects/target [INFO] [INFO] --- install:3.1.4:install (default-install) @ projects --- [INFO] Installing /home/herve/dev/maven/sources/studies/deploy/projects/pom.xml to /home/herve/.m2/repository/org/apache/maven/studies/projects/1.0/projects-1.0.pom [INFO] [INFO] --- deploy:3.1.4:deploy (default-deploy) @ projects --- [INFO] Using alternate deployment repository local::file:target/deploy Uploading to local: file:target/deploy/org/apache/maven/studies/projects/1.0/projects-1.0.pom Uploaded to local: file:target/deploy/org/apache/maven/studies/projects/1.0/projects-1.0.pom (696 B at 696 kB/s) Downloading from local: file:target/deploy/org/apache/maven/studies/projects/maven-metadata.xml Uploading to local: file:target/deploy/org/apache/maven/studies/projects/maven-metadata.xml Uploaded to local: file:target/deploy/org/apache/maven/studies/projects/maven-metadata.xml (308 B) [INFO] ... [INFO] --- deploy:3.1.4:deploy (default-deploy) @ ear --- [INFO] Using alternate deployment repository local::file:target/deploy Uploading to local: file:target/deploy/org/apache/maven/studies/ear/1.0/ear-1.0.pom Uploaded to local: file:target/deploy/org/apache/maven/studies/ear/1.0/ear-1.0.pom (1.4 kB) Uploading to local: file:target/deploy/org/apache/maven/studies/ear/1.0/ear-1.0.ear Uploaded to local: file:target/deploy/org/apache/maven/studies/ear/1.0/ear-1.0.ear (6.1 kB at 6.1 MB/s) Downloading from local: file:target/deploy/org/apache/maven/studies/ear/maven-metadata.xml Uploading to local: file:target/deploy/org/apache/maven/studies/ear/maven-metadata.xml Uploaded to local: file:target/deploy/org/apache/maven/studies/ear/maven-metadata.xml (303 B) [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for deploy study root 1.0: [INFO] [INFO] deploy study root .................................. SUCCESS [ 0.119 s] [INFO] sub projects ....................................... SUCCESS [ 0.006 s] [INFO] logging ............................................ SUCCESS [ 0.317 s] [INFO] core project classes ............................... SUCCESS [ 0.018 s] [INFO] enterprise java beans .............................. SUCCESS [ 0.176 s] [INFO] servlet ............................................ SUCCESS [ 0.172 s] [INFO] ear assembly ....................................... SUCCESS [ 0.155 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.160 s [INFO] Finished at: 2025-07-19T11:29:00+02:00 [INFO] ------------------------------------------------------------------------ [INFO] Njord session closed
resulting files and directory tree is available in target/deploy, showing 57 (=3*19) individual files (= 7 .pom+maven-metadata.xml = one per goupId/artifactId/version, 5 .jar/.ear/.war => 19 files, each with 2 fingerprints .md5/.sha1):
tree target/deploy
$ tree target/deploy
target/deploy
└── org
└── apache
└── maven
└── studies
├── deploy
│ ├── 1.0
│ │ ├── deploy-1.0.pom
│ │ ├── deploy-1.0.pom.md5
│ │ └── deploy-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── ear
│ ├── 1.0
│ │ ├── ear-1.0.ear
│ │ ├── ear-1.0.ear.md5
│ │ ├── ear-1.0.ear.sha1
│ │ ├── ear-1.0.pom
│ │ ├── ear-1.0.pom.md5
│ │ └── ear-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── ejbs
│ ├── 1.0
│ │ ├── ejbs-1.0.jar
│ │ ├── ejbs-1.0.jar.md5
│ │ ├── ejbs-1.0.jar.sha1
│ │ ├── ejbs-1.0.pom
│ │ ├── ejbs-1.0.pom.md5
│ │ └── ejbs-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── logging
│ ├── 1.0
│ │ ├── logging-1.0.jar
│ │ ├── logging-1.0.jar.md5
│ │ ├── logging-1.0.jar.sha1
│ │ ├── logging-1.0.pom
│ │ ├── logging-1.0.pom.md5
│ │ └── logging-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── primary-source
│ ├── 1.0
│ │ ├── primary-source-1.0.jar
│ │ ├── primary-source-1.0.jar.md5
│ │ ├── primary-source-1.0.jar.sha1
│ │ ├── primary-source-1.0.pom
│ │ ├── primary-source-1.0.pom.md5
│ │ └── primary-source-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── projects
│ ├── 1.0
│ │ ├── projects-1.0.pom
│ │ ├── projects-1.0.pom.md5
│ │ └── projects-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
└── servlet
├── 1.0
│ ├── servlet-1.0.pom
│ ├── servlet-1.0.pom.md5
│ ├── servlet-1.0.pom.sha1
│ ├── servlet-1.0.war
│ ├── servlet-1.0.war.md5
│ └── servlet-1.0.war.sha1
├── maven-metadata.xml
├── maven-metadata.xml.md5
└── maven-metadata.xml.sha1
19 directories, 57 files
Intentionally, we did not add sources, GPG signature nor javadoc, but a central-prerequisites profile is provided to add them to the structure.
mvn clean deploy -DaltDeploymentRepository=local::file:target/deploy -Pcentral-prerequisites
that will add maven-source-plugin, maven-javadoc-plugin and maven-gpg-plugin:
... [INFO] ------------------< org.apache.maven.studies:servlet >------------------ [INFO] Building servlet 1.0 [6/7] [INFO] from projects/servlet/pom.xml [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- buildplan:2.2.2:list (default-cli) @ servlet --- [INFO] Build Plan for servlet: ------------------------------------------------------------------------------------------------- PHASE | PLUGIN | VERSION | GOAL | EXECUTION ID ------------------------------------------------------------------------------------------------- process-resources | maven-resources-plugin | 3.3.1 | resources | default-resources compile | maven-compiler-plugin | 3.14.0 | compile | default-compile process-test-resources | maven-resources-plugin | 3.3.1 | testResources | default-testResources test-compile | maven-compiler-plugin | 3.14.0 | testCompile | default-testCompile test | maven-surefire-plugin | 3.5.3 | test | default-test package | maven-war-plugin | 3.4.0 | war | default-war package | maven-source-plugin | 3.3.1 | jar-no-fork | attach-sources package | maven-javadoc-plugin | 3.11.2 | jar | attach-javadocs verify | maven-gpg-plugin | 3.2.8 | sign | sign-artifacts install | maven-install-plugin | 3.1.4 | install | default-install deploy | maven-deploy-plugin | 3.1.4 | deploy | default-deploy ...
After execution with central-prerequisites profile, each artifact file has an additional .asc PGP detached signature (notice: not maven-metadata.xml), and some packagings provide -sources.jar and -javadoc.jar, which gives us now 73 files (= 3 * 7 for metadata + 4 * 13):
$ tree target/deploy
target/deploy
└── org
└── apache
└── maven
└── studies
├── deploy
│ ├── 1.0
│ │ ├── deploy-1.0.pom
│ │ ├── deploy-1.0.pom.asc
│ │ ├── deploy-1.0.pom.md5
│ │ └── deploy-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── ear
│ ├── 1.0
│ │ ├── ear-1.0.ear
│ │ ├── ear-1.0.ear.asc
│ │ ├── ear-1.0.ear.md5
│ │ ├── ear-1.0.ear.sha1
│ │ ├── ear-1.0.pom
│ │ ├── ear-1.0.pom.asc
│ │ ├── ear-1.0.pom.md5
│ │ └── ear-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── ejbs
│ ├── 1.0
│ │ ├── ejbs-1.0.jar
│ │ ├── ejbs-1.0.jar.asc
│ │ ├── ejbs-1.0.jar.md5
│ │ ├── ejbs-1.0.jar.sha1
│ │ ├── ejbs-1.0.pom
│ │ ├── ejbs-1.0.pom.asc
│ │ ├── ejbs-1.0.pom.md5
│ │ ├── ejbs-1.0.pom.sha1
│ │ ├── ejbs-1.0-sources.jar
│ │ ├── ejbs-1.0-sources.jar.asc
│ │ ├── ejbs-1.0-sources.jar.md5
│ │ └── ejbs-1.0-sources.jar.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── logging
│ ├── 1.0
│ │ ├── logging-1.0.jar
│ │ ├── logging-1.0.jar.asc
│ │ ├── logging-1.0.jar.md5
│ │ ├── logging-1.0.jar.sha1
│ │ ├── logging-1.0.pom
│ │ ├── logging-1.0.pom.asc
│ │ ├── logging-1.0.pom.md5
│ │ └── logging-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── primary-source
│ ├── 1.0
│ │ ├── primary-source-1.0.jar
│ │ ├── primary-source-1.0.jar.asc
│ │ ├── primary-source-1.0.jar.md5
│ │ ├── primary-source-1.0.jar.sha1
│ │ ├── primary-source-1.0.pom
│ │ ├── primary-source-1.0.pom.asc
│ │ ├── primary-source-1.0.pom.md5
│ │ └── primary-source-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── projects
│ ├── 1.0
│ │ ├── projects-1.0.pom
│ │ ├── projects-1.0.pom.asc
│ │ ├── projects-1.0.pom.md5
│ │ └── projects-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
└── servlet
├── 1.0
│ ├── servlet-1.0.pom
│ ├── servlet-1.0.pom.asc
│ ├── servlet-1.0.pom.md5
│ ├── servlet-1.0.pom.sha1
│ ├── servlet-1.0.war
│ ├── servlet-1.0.war.asc
│ ├── servlet-1.0.war.md5
│ └── servlet-1.0.war.sha1
├── maven-metadata.xml
├── maven-metadata.xml.md5
└── maven-metadata.xml.sha1
19 directories, 73 files
When run with Maven 4, the output in addition contains build POMs = *-build.pom, which brings us to 101 files:
$ tree target/deploy
target/deploy
└── org
└── apache
└── maven
└── studies
├── deploy
│ ├── 1.0
│ │ ├── deploy-1.0-build.pom
│ │ ├── deploy-1.0-build.pom.asc
│ │ ├── deploy-1.0-build.pom.md5
│ │ ├── deploy-1.0-build.pom.sha1
│ │ ├── deploy-1.0.pom
│ │ ├── deploy-1.0.pom.asc
│ │ ├── deploy-1.0.pom.md5
│ │ └── deploy-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── ear
│ ├── 1.0
│ │ ├── ear-1.0-build.pom
│ │ ├── ear-1.0-build.pom.asc
│ │ ├── ear-1.0-build.pom.md5
│ │ ├── ear-1.0-build.pom.sha1
│ │ ├── ear-1.0.ear
│ │ ├── ear-1.0.ear.asc
│ │ ├── ear-1.0.ear.md5
│ │ ├── ear-1.0.ear.sha1
│ │ ├── ear-1.0.pom
│ │ ├── ear-1.0.pom.asc
│ │ ├── ear-1.0.pom.md5
│ │ └── ear-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── ejbs
│ ├── 1.0
│ │ ├── ejbs-1.0-build.pom
│ │ ├── ejbs-1.0-build.pom.asc
│ │ ├── ejbs-1.0-build.pom.md5
│ │ ├── ejbs-1.0-build.pom.sha1
│ │ ├── ejbs-1.0.jar
│ │ ├── ejbs-1.0.jar.asc
│ │ ├── ejbs-1.0.jar.md5
│ │ ├── ejbs-1.0.jar.sha1
│ │ ├── ejbs-1.0.pom
│ │ ├── ejbs-1.0.pom.asc
│ │ ├── ejbs-1.0.pom.md5
│ │ ├── ejbs-1.0.pom.sha1
│ │ ├── ejbs-1.0-sources.jar
│ │ ├── ejbs-1.0-sources.jar.asc
│ │ ├── ejbs-1.0-sources.jar.md5
│ │ └── ejbs-1.0-sources.jar.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── logging
│ ├── 1.0
│ │ ├── logging-1.0-build.pom
│ │ ├── logging-1.0-build.pom.asc
│ │ ├── logging-1.0-build.pom.md5
│ │ ├── logging-1.0-build.pom.sha1
│ │ ├── logging-1.0.jar
│ │ ├── logging-1.0.jar.asc
│ │ ├── logging-1.0.jar.md5
│ │ ├── logging-1.0.jar.sha1
│ │ ├── logging-1.0.pom
│ │ ├── logging-1.0.pom.asc
│ │ ├── logging-1.0.pom.md5
│ │ └── logging-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── primary-source
│ ├── 1.0
│ │ ├── primary-source-1.0-build.pom
│ │ ├── primary-source-1.0-build.pom.asc
│ │ ├── primary-source-1.0-build.pom.md5
│ │ ├── primary-source-1.0-build.pom.sha1
│ │ ├── primary-source-1.0.jar
│ │ ├── primary-source-1.0.jar.asc
│ │ ├── primary-source-1.0.jar.md5
│ │ ├── primary-source-1.0.jar.sha1
│ │ ├── primary-source-1.0.pom
│ │ ├── primary-source-1.0.pom.asc
│ │ ├── primary-source-1.0.pom.md5
│ │ └── primary-source-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── projects
│ ├── 1.0
│ │ ├── projects-1.0-build.pom
│ │ ├── projects-1.0-build.pom.asc
│ │ ├── projects-1.0-build.pom.md5
│ │ ├── projects-1.0-build.pom.sha1
│ │ ├── projects-1.0.pom
│ │ ├── projects-1.0.pom.asc
│ │ ├── projects-1.0.pom.md5
│ │ └── projects-1.0.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
└── servlet
├── 1.0
│ ├── servlet-1.0-build.pom
│ ├── servlet-1.0-build.pom.asc
│ ├── servlet-1.0-build.pom.md5
│ ├── servlet-1.0-build.pom.sha1
│ ├── servlet-1.0.pom
│ ├── servlet-1.0.pom.asc
│ ├── servlet-1.0.pom.md5
│ ├── servlet-1.0.pom.sha1
│ ├── servlet-1.0.war
│ ├── servlet-1.0.war.asc
│ ├── servlet-1.0.war.md5
│ └── servlet-1.0.war.sha1
├── maven-metadata.xml
├── maven-metadata.xml.md5
└── maven-metadata.xml.sha1
19 directories, 101 files
TODO: add discussion for .sha256 and .sha512 addition, which would go from 101 files to 155 (= 7 metadata * 5 (4 fingerprints) + 20 artifact files * 6 (.asc + 4 fingerprints))... (notice: when some tools publish fingeprints for .asc files, they add 20 * 4 = 80 additional files...)