diff --git a/002-mavenrelease-fixbuild.patch b/002-mavenrelease-fixbuild.patch
new file mode 100644
index 0000000..5011340
--- /dev/null
+++ b/002-mavenrelease-fixbuild.patch
@@ -0,0 +1,54 @@
+--- maven-release-2.2/maven-release-manager/pom.xml 2011-06-27 10:45:56.000000000 +0200
++++ maven-release-2.2-patched/maven-release-manager/pom.xml 2011-07-26 16:06:54.854973698 +0200
+@@ -80,6 +80,12 @@
+
+
+ org.apache.maven
++ maven-compat
++ ${mavenVersion}
++
++
++
++ org.apache.maven
+ maven-model
+ ${mavenVersion}
+
+@@ -254,13 +243,13 @@
+
+
+ org.codehaus.plexus
+- plexus-maven-plugin
++ plexus-component-metadata
+
+
+ create-component-descriptor
+ generate-resources
+
+- descriptor
++ generate-metadata
+
+
+
+@@ -274,7 +263,7 @@
+
+ process-resources
+
+- merge-descriptors
++ merge-metadata
+
+
+
+--- maven-release-2.2/maven-release-plugin/pom.xml 2011-06-27 10:45:56.000000000 +0200
++++ maven-release-2.2-patched/maven-release-plugin/pom.xml 2011-07-26 16:03:02.203751549 +0200
+@@ -53,6 +53,11 @@
+
+
+ org.apache.maven
++ maven-compat
++ ${mavenVersion}
++
++
++ org.apache.maven
+ maven-plugin-api
+ ${mavenVersion}
+
diff --git a/003-fixing-migration-to-component-metadata.patch b/003-fixing-migration-to-component-metadata.patch
new file mode 100644
index 0000000..5609260
--- /dev/null
+++ b/003-fixing-migration-to-component-metadata.patch
@@ -0,0 +1,14 @@
+diff -Naur maven-release-2.2.1.orig/maven-release-manager/pom.xml maven-release-2.2.1/maven-release-manager/pom.xml
+--- maven-release-2.2.1.orig/maven-release-manager/pom.xml 2012-09-12 14:06:31.000000000 +0200
++++ maven-release-2.2.1/maven-release-manager/pom.xml 2012-09-17 15:00:16.873536747 +0200
+@@ -295,8 +295,8 @@
+
+
+ org.codehaus.plexus
+- plexus-maven-plugin
+- 1.3.8
++ plexus-component-metadata
++ 1.5.5
+
+
+
diff --git a/maven-release-2.2.1-source-release.zip b/maven-release-2.2.1-source-release.zip
new file mode 100644
index 0000000..6941522
Binary files /dev/null and b/maven-release-2.2.1-source-release.zip differ
diff --git a/maven-release-MNG-3954.patch b/maven-release-MNG-3954.patch
new file mode 100644
index 0000000..557111e
--- /dev/null
+++ b/maven-release-MNG-3954.patch
@@ -0,0 +1,12 @@
+--- maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java~ 2011-07-28 15:42:12.000000000 +0200
++++ maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java 2015-11-27 08:41:43.677304909 +0100
+@@ -364,8 +364,7 @@
+
+ if ( releaseEnvironment.getSettings() != null )
+ {
+- // FIXME: This is effectively useless in Maven 2.x, since getFile() always returns null
+- File settingsFile = releaseEnvironment.getSettings().getRuntimeInfo().getFile();
++ File settingsFile = org.apache.maven.settings.RuntimeInfo.DEFAULT_USER_SETTINGS_FILE;
+ if ( settingsFile != null && settingsFile.isFile() )
+ {
+ req.setUserSettingsFile( settingsFile );
diff --git a/maven-release-ftbfs.patch b/maven-release-ftbfs.patch
new file mode 100644
index 0000000..50ac412
--- /dev/null
+++ b/maven-release-ftbfs.patch
@@ -0,0 +1,42 @@
+--- maven-release-2.2.1/maven-release-manager/src/main/mdo/release-descriptor.mdo.orig 2013-12-24 02:51:03.017016426 -0200
++++ maven-release-2.2.1/maven-release-manager/src/main/mdo/release-descriptor.mdo 2013-12-24 02:51:57.939013819 -0200
+@@ -523,7 +523,7 @@
+
+ versionsMap.put( DEVELOPMENT_KEY, developmentVersion );
+ versionsMap.put( RELEASE_KEY, releaseVersion );
+- resolvedSnapshotDependencies.put( artifactName, versionsMap );
++ resolvedSnapshotDependencies.put( artifactName, String.class.cast(versionsMap) );
+ }
+
+ /**
+@@ -575,7 +575,7 @@
+ assert !originalScmInfo.containsKey( projectId );
+ }
+
+- originalScmInfo.put( projectId, scm );
++ originalScmInfo.put( projectId, String.class.cast(scm) );
+ }
+
+ /**
+@@ -613,8 +613,8 @@
+ {
+ if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
+ {
+- java.util.Map versionMap = ( java.util.Map ) resolvedSnapshotDependencies.get( artifactConflictId );
+- return ( String ) versionMap.get( DEVELOPMENT_KEY );
++ java.util.Map versionMap = java.util.Map.class.cast(resolvedSnapshotDependencies.get( artifactConflictId ));
++ return String.class.cast(versionMap.get( DEVELOPMENT_KEY ));
+ }
+ return null;
+ }
+@@ -627,8 +627,8 @@
+ {
+ if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
+ {
+- java.util.Map versionMap = ( java.util.Map ) resolvedSnapshotDependencies.get( artifactConflictId );
+- return ( String ) versionMap.get( RELEASE_KEY );
++ java.util.Map versionMap = java.util.Map.class.cast(resolvedSnapshotDependencies.get( artifactConflictId ));
++ return String.class.cast(versionMap.get( RELEASE_KEY ));
+ }
+ return null;
+ }
diff --git a/maven-release.spec b/maven-release.spec
new file mode 100644
index 0000000..eff512d
--- /dev/null
+++ b/maven-release.spec
@@ -0,0 +1,94 @@
+Name: maven-release
+Version: 2.2.1
+Release: 1
+Summary: Release a project updating the POM and tagging in the SCM
+License: ASL 2.0
+URL: http://maven.apache.org/plugins/maven-release-plugin/
+BuildArch: noarch
+Source0: https://repo1.maven.org/maven2/org/apache/maven/release/maven-release/2.2.1/maven-release-2.2.1-source-release.zip
+Patch1: 002-mavenrelease-fixbuild.patch
+Patch2: 003-fixing-migration-to-component-metadata.patch
+Patch3: %{name}-ftbfs.patch
+Patch4: %{name}-MNG-3954.patch
+BuildRequires: maven-local mvn(commons-cli:commons-cli) mvn(commons-lang:commons-lang)
+BuildRequires: mvn(jaxen:jaxen) mvn(org.apache.maven:maven-artifact)
+BuildRequires: mvn(org.apache.maven:maven-artifact-manager) mvn(org.apache.maven:maven-compat)
+BuildRequires: mvn(org.apache.maven:maven-core) mvn(org.apache.maven:maven-model)
+BuildRequires: mvn(org.apache.maven:maven-parent:pom:) mvn(org.apache.maven:maven-plugin-api)
+BuildRequires: mvn(org.apache.maven:maven-project) mvn(org.apache.maven:maven-settings)
+BuildRequires: mvn(org.apache.maven.plugins:maven-enforcer-plugin)
+BuildRequires: mvn(org.apache.maven.plugins:maven-plugin-plugin)
+BuildRequires: mvn(org.apache.maven.scm:maven-scm-api)
+BuildRequires: mvn(org.apache.maven.scm:maven-scm-provider-svn-commons)
+BuildRequires: mvn(org.apache.maven.shared:maven-invoker)
+BuildRequires: mvn(org.codehaus.modello:modello-maven-plugin)
+BuildRequires: mvn(org.codehaus.plexus:plexus-component-metadata)
+BuildRequires: mvn(org.codehaus.plexus:plexus-container-default)
+BuildRequires: mvn(org.codehaus.plexus:plexus-interactivity-api)
+BuildRequires: mvn(org.codehaus.plexus:plexus-interpolation)
+BuildRequires: mvn(org.codehaus.plexus:plexus-utils) mvn(org.jdom:jdom)
+BuildRequires: mvn(org.sonatype.plexus:plexus-sec-dispatcher)
+%description
+This plugin is used to release a project with Maven, saving a lot of
+repetitive, manual work. Releasing a project is made in two steps:
+prepare and perform.
+
+%package manager
+Summary: Release a project updating the POM and tagging in the SCM
+%description manager
+This package contains %{name}-manager needed by %{name}-plugin.
+
+%package plugin
+Summary: Release a project updating the POM and tagging in the SCM
+%description plugin
+This plugin is used to release a project with Maven, saving a lot of
+repetitive, manual work. Releasing a project is made in two steps:
+prepare and perform.
+
+%package javadoc
+Summary: Javadoc for %{name}
+Provides: %{name}-manager-javadoc = %{version}-%{release}
+Obsoletes: %{name}-manager-javadoc <= 2.0-1
+Provides: %{name}-plugin-javadoc = %{version}-%{release}
+Obsoletes: %{name}-plugin-javadoc <= 2.0-1
+%description javadoc
+This package contains the API documentation for %{name}.
+
+%prep
+%setup -q -n %{name}-%{version}
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p0
+cat > README << EOT
+%{name}-%{version}
+This plugin is used to release a project with Maven, saving a lot of
+repetitive, manual work. Releasing a project is made in two steps:
+prepare and perform.
+EOT
+
+%build
+%mvn_file :%{name}-manager %{name}-manager
+%mvn_file :%{name}-plugin %{name}-plugin
+%mvn_package :%{name}-manager manager
+%mvn_package :%{name}-plugin plugin
+%mvn_build -f
+
+%install
+%mvn_install
+
+%files -f .mfiles
+%doc LICENSE NOTICE README
+
+%files manager -f .mfiles-manager
+%doc LICENSE NOTICE
+
+%files plugin -f .mfiles-plugin
+%doc LICENSE NOTICE
+
+%files javadoc -f .mfiles-javadoc
+%doc LICENSE NOTICE
+
+%changelog
+* Wed Aug 5 2020 chengzihan - 2.2.1-1
+- Package init
diff --git a/maven-release.yaml b/maven-release.yaml
new file mode 100644
index 0000000..eac7b21
--- /dev/null
+++ b/maven-release.yaml
@@ -0,0 +1,4 @@
+version_control: github
+src_repo: apache/maven-release
+tag_prefix: "maven-release-"
+seperator: "."