Make AWS S3 Bucket as your private maven repository
APACHE-2.0 License
Introduction With the help of this maven-plugin you can create your own private Maven Repository with the essential features. There are many commercial products out there, for example: Nexus, JFrog and ets.., but the drawback is they required more resources (Compute and storage) and some are costly. Where you can simply setup in your AWS cloud with much much less cost.
Start Here
Create IAM User, -Rule and -Policy.
You can use both AWS-CLI or Web Console (browser: https://aws.amazon.com/)
Note: make sure that you have latest AWS CLI installed in your PC. Note: make sure that you are in your project root directory and have permission to create a file.
curl -s https://raw.githubusercontent.com/ehsaniara/maven-repository-aws-s3/master/aws-s3-setup.sh | bash /dev/stdin bucket_name username
(browser: https://aws.amazon.com/)
Create a AWS S3 bucket, try to have unique name from you domain, for example: my-project-com-maven-repository
and also create 2 folder of release
and snapshot
in it.
Create policy with the following json (select json tab):
YOUR_BUCKET_NAME
by your bucket name, for example: my-project-com-maven-repository
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:CreateBucket",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
}
]
}
then give name to this policy. something similar to your bucket name, for example: my-project-com-maven-repository-policy
and then create the policy.
on Add user, select a User name and make sure you have select the "Programmatic access"
then select "Attach existing policies directly", and in Filter policies
box search for your the policy name you have just created.
then tag,review and create the user.
Important: Make sure that you have download the .csv file and store it in the secure place. the credentials in this file is required to user in your
~/.m2/setting.xml
file
create a user with (Programmatic access).
If you plane to deploy you project jar from your local machine you need to follow the following steps.
.m2
add the following XML snaps in setting.xml
.setting.xml
if it's not exist in .m2
directory<settings>
<servers>
...
...
<server>
<id>YOUR_BUCKET_NAME-snapshot</id>
<username>AWS_ACCESS_KEY_ID</username>
<password>AWS_SECRET_ACCESS_KEY</password>
<configuration>
<region>AWS_REGION</region>
<publicRepository>false</publicRepository>
</configuration>
</server>
<server>
<id>YOUR_BUCKET_NAME-release</id>
<username>AWS_ACCESS_KEY_ID</username>
<password>AWS_SECRET_ACCESS_KEY</password>
<configuration>
<region>AWS_REGION</region>
<publicRepository>false</publicRepository>
</configuration>
</server>
....
....
</servers>
</settings>
pom.xml
add the following xml to let maven DOWNLOAD your project artifactory from the maven-repo<repositories>
<repository>
<id>YOUR_BUCKET_NAME-snapshot</id>
<url>s3://YOUR_BUCKET_NAME/snapshot</url>
</repository>
<repository>
<id>YOUR_BUCKET_NAME-release</id>
<url>s3://YOUR_BUCKET_NAME/release</url>
</repository>
</repositories>
<id>YOUR_BUCKET_NAME-snapshot</id>
and <id>YOUR_BUCKET_NAME-release</id>
should be identical with your .m2/setting.xml
idspom.xml
add the following xml to let maven UPLOAD your project artifactory into the maven-repo<distributionManagement>
<snapshotRepository>
<id>YOUR_BUCKET_NAME-snapshot</id>
<url>s3://YOUR_BUCKET_NAME/snapshot</url>
</snapshotRepository>
<repository>
<id>YOUR_BUCKET_NAME-release</id>
<url>s3://YOUR_BUCKET_NAME/release</url>
</repository>
</distributionManagement>
And the most important one, add the following xml in your project pom.xml
with in the <build>
tag
<build>
...
<extensions>
<extension>
<groupId>com.github.ehsaniara</groupId>
<artifactId>maven-repository-aws-s3</artifactId>
<version>1.2.11</version>
</extension>
</extensions>
...
</build>
for Example:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>com.github.ehsaniara</groupId>
<artifactId>maven-repository-aws-s3</artifactId>
<version>1.2.11</version>
</extension>
</extensions>
</build>
once you have setup your pom.xml file in your project you can run the following line:
# to clean your target directory
mvn clean
# deploy your artifactory into you maven-repo (AWS S3 Bucket)
mvn deploy
[updating soon..]
Apache wagon: http://maven.apache.org/wagon/