:notoc:

= Download

:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. https://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

== Latest Release


v{latestStable}

== Prerequisits

The minimum JavaEE version is JavaEE 6.

The minmium Java version until DeltaSpike-1.8.x is Java 6.
The minimum Java version from DeltaSpike-1.9.0 upwards is Java8.


== Binary Distribution


* https://www.apache.org/dyn/closer.lua/deltaspike/{latestStable}/distribution-full-{latestStable}.zip[distribution-full-{latestStable}.zip]
* https://www.apache.org/dist/deltaspike/{latestStable}/distribution-full-{latestStable}.zip.asc[distribution-full-{latestStable}.zip.asc]
* https://www.apache.org/dist/deltaspike/{latestStable}/distribution-full-{latestStable}.zip.sha512[distribution-full-{latestStable}.zip.sha512]
* https://www.apache.org/dist/deltaspike/{latestStable}/distribution-full-{latestStable}.zip.sha1[distribution-full-{latestStable}.zip.sha1]

* https://www.apache.org/dyn/closer.lua/deltaspike/{latestStable}/distribution-full-{latestStable}.tar.gz[distribution-full-{latestStable}.tar.gz]
* https://www.apache.org/dist/deltaspike/{latestStable}/distribution-full-{latestStable}.tar.gz.asc[distribution-full-{latestStable}.tar.gz.asc]
* https://www.apache.org/dist/deltaspike/{latestStable}/distribution-full-{latestStable}.tar.gz.sha512[distribution-full-{latestStable}.tar.gz.sha512]
* https://www.apache.org/dist/deltaspike/{latestStable}/distribution-full-{latestStable}.tar.gz.sha1[distribution-full-{latestStable}.tar.gz.sha1]


== Source Distribution


* https://www.apache.org/dyn/closer.lua/deltaspike/{latestStable}/deltaspike-{latestStable}-source-release.zip[deltaspike-{latestStable}-source-release.zip]
* https://www.apache.org/dist/deltaspike/{latestStable}/deltaspike-{latestStable}-source-release.zip.asc[deltaspike-{latestStable}-source-release.zip.asc]
* https://www.apache.org/dist/deltaspike/{latestStable}/deltaspike-{latestStable}-source-release.zip.sha512[deltaspike-{latestStable}-source-release.zip.sha512]
* https://www.apache.org/dist/deltaspike/{latestStable}/deltaspike-{latestStable}-source-release.zip.sha1[deltaspike-{latestStable}-source-release.zip.sha1]


== Maven Dependencies


Details are available https://deltaspike.apache.org/documentation/configure.html#MavenProjects[here].


== Previous Releases


See https://archive.apache.org/dist/deltaspike/[Release-Archive]


== Verifying Releases


It is essential that you verify the integrity of any downloaded files using the PGP or MD5 signatures.
For more information on signing artifacts and why we do it, check out the
https://www.apache.org/dev/release-signing.html[Release Signing FAQ].

The PGP signatures can be verified using PGP or GPG. First download the
https://www.apache.org/dist/deltaspike/KEYS[KEYS]
as well as the asc signature file for the artifact.
Make sure you get these files from the
https://www.apache.org/dist/deltaspike/[main distribution directory],
rather than from a
https://www.apache.org/dyn/closer.lua/deltaspike/[mirror]. Then verify
the signatures using e.g.:

[subs="+attributes"]
------------------------------------------------------
$ pgpk -a KEYS
$ pgpv deltaspike-project-{latestStable}-source-release.zip.asc
------------------------------------------------------

or

[subs="+attributes"]
-----------------------------------------------------
$ pgp -ka KEYS
$ pgp deltaspike-project-{latestStable}-source-release.zip.asc
-----------------------------------------------------

or

[subs="+attributes"]
--------------------------------------------------------------
$ gpg --import KEYS
$ gpg --verify deltaspike-project-{latestStable}-source-release.zip.asc deltaspike-project-{latestStable}-source-release.zip
--------------------------------------------------------------

More information can be found at the https://www.apache.org/info/verification.html#CheckingSignatures[ASF Checking Signatures page]