- vừa được xem lúc

Custom Self-Hosted Maven Repository

0 0 33

Người đăng: Duy Nguyễn

Theo Viblo Asia

Giới thiệu

Đối với một số ứng dụng sử dụng nhiều Micro Service bên trong, những Class, Function,... có thể dụng lại cho tất cả service khác thì việc copy past rất là bất tiện và khó khăn.
Có rất nhiều cách để triển khai thành một thư viện cho chính chúng ta, nhưng hầu hết sẽ được public trên Maven Central.

Nên hôm nay mình sẽ trình bày cách làm thế nào để tạo ra thư viện của riêng chúng ta và sử dụng một cách riêng tư (private) đối với một số công ty hoặc project không muốn public ra bên ngoài

Mình sẽ sử dụng open source là Reposilite.
Reposilite là một kho quản trí lưu trữ nhẹ dành cho các Maven artifact.

Ở bài viết này mình sẽ trình bày từng bước cài đặt và triển khai artifact một cách cụ thể.

Let go~.

Cài Đặt

Tải file .jar của Reposilite tại Github

Ở đây mình sẽ tải xuống bản mới nhất là Reposilite 3.0.0-alpha.23
Lưu ý: Hãy đặt file .jar vào thư mục rỗng vì khi run sẽ tự sinh ra một số file khác.

Mở terminal và cd vào đường dẫn mà bạn lưu trữ file .jar và chạy dòng lệnh:

$ java -Xmx32M -jar reposilite-3.0.0-alpha.23-all.jar

Sau khi khởi tạo:

Terminal sẽ cung cấp giao diện CLI để người dùng tương tác.

Ứng dụng sẽ chạy mặc định trên localhost với port 80 (http://localhost:80)
Screen Shot 2022-03-21 at 13.29.22.png

Authorization

Để sử dụng thì trước hết chúng ta phải tạo một access token.
Có rất nhiều cách phân quyền và quản lí trên Reposilite, tham khảo tại Authorization
Còn ở đây mình sẽ tạo một user với một quyền cao nhất là admin.

Để tạo chạy câu lệnh dưới dây trên giao diện CLI:

token-generate [--secret=<secret>] <name> [<permissions>]

E.g:

token-generate admin m

m được đánh dấu user đó như là một quản trị viên, sẽ có tất cả quyền hạn như truy cấp vào tất cả các path trong kho lưu trữ của Reposilite và cho phép truy cập CLI từ xa thông qua dashboard.

Screen Shot 2022-03-21 at 13.51.03.png
Reposilite sẽ tạo cho chúng ta một access token.

Quay trở lại giao diện ứng dụng của Reposilite(http://localhost:80) và Sign in bằng name và access token mà bạn vừa tạo ra, bạn sẽ thấy index release lúc này đang rỗng.

Screen Shot 2022-03-21 at 13.55.07.png

Deployment

Ở đây mình sẽ tạo một project bằng framework Quarkus của Java.

Screen Shot 2022-03-21 at 14.08.55.png
Mình sẽ viết một Class đơn giản như cộng trừ nhân chia chẳng hạn 😄

package org.reposilite; public class Operation { public Integer plus(int number1,int number2) { return number1 + number2; } public Integer minus(int number1,int number2) { return number1 - number2; } public Integer divide(int number1,int number2) { if(number2 == 0) return null; return number1 / number2; } public Integer multiply(int number1,int number2) { return number1 * number2; }
}

Ví dụ như Class này sẽ có nhiều service sử dụng lại, thay vì phải copy paste thì bây giờ mình sẽ triển khai nó như một thư viện để sử dụng cho tất cả các project sau này nhưng không public ra bên ngoài 😉

Deploy bằng cách sử dụng mvn deploy

Trong project của bạn tại file pom.xml thêm vào :

<project>
... <distributionManagement> <repository> <id>my-repository</id> <url>http://localhost:80/releases</url> </repository> </distributionManagement>
...
</project>

id là id repository mà bạn muốn đặt tên.
url là đường dẫn đến repository server.


Trong file ~/m2/settings.xml trên máy của bạn thêm vào:

<server> <!-- id phải trùng khớp với id được định nghĩa ở file pom.xml trong project--> <id>my-repository</id> <username>{alias}</username> <password>{token}</password>
</server>

aliastoken bạn đã tạo ra ở bước Authorization, vậy ta có:

<server> <!-- id phải trùng khớp với id được định nghĩa ở file pom.xml trong project của bạn--> <id>my-repository</id> <username>admin</username> <password>IEnfkPeMfUjU0dlt2eMPFEBvw0Hm16nCPdB0FbvHMOFBAIk3c4AIA00Lir7g01Hk</password>
</server>

Screen Shot 2022-03-21 at 14.49.35.png

Chạy câu lệnh để triển khai project của bạn lên Reposilite:

mvn deploy

Screen Shot 2022-03-21 at 14.46.07.png

Vậy là hoàn tất quá trình deploy, ta quay lại giao diện Reposilite kiểm tra:

Screen Shot 2022-03-21 at 14.47.22.png

Vậy là lên rồi 😄

Cách sử dụng

Bây giờ mình sẽ tạo project khác và sử dụng thư viện mà ta vừa deploy 😛
Hai thư viện mình sử dụng thêm ở đây là:

  • RESTEasy Jackson
  • SmallRye OpenAPI

Screen Shot 2022-03-21 at 15.00.25.png

Ở giao diện Reposilite ta copy dependency vào file pom.xml của project mới vừa tạo.

Screen Shot 2022-03-21 at 15.08.39.png

<dependencies> <dependency> <groupId>org.reposilite</groupId> <artifactId>my-practice-repo</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>
</dependencies>

Và:

<repositories>
<!--Your custom maven repo--> <repository> <id>my-repository</id> <name>My custom maven repo</name> <url>http://localhost:80</url> </repository>
</repositories>

Chạy câu lệnh để cài đặt các thư viện trong file pom.xml

mvn clean install

Sau đó thử gõ Class Operation xem gợi ý không:

Screen Shot 2022-03-21 at 15.22.25.png
Vậy là có rồi 😄

Tiếp theo mình sẽ khởi tạo một api đơn giản tại src/main/java/me/repo/practice/MyPracticeResource

package me.repo.practice; import org.reposilite.Operation; import javax.ws.rs.*;
import javax.ws.rs.core.MediaType; @Path("/operator")
public class MyPracticeResource { Operation operator = new Operation(); @POST @Path("plus") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public Integer plus(@QueryParam("a") int numberA,@QueryParam("b") int numberB) { return operator.plus(numberA,numberB); } @GET @Path("minus") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public Integer minus(@QueryParam("a") int numberA,@QueryParam("b") int numberB) { return operator.minus(numberA,numberB); }
}

Chạy câu lệnh để khởi động project:

mvn quarkus:dev

Gọi thử API minus và xem kết quả nhé :

curl -X 'GET' 'http://localhost:8080/operator/minus?a=10&b=2' -H 'accept: application/json'

Screen Shot 2022-03-21 at 15.35.10.png

Và ta có kết quả là 8

References

https://kihats.medium.com/custom-self-hosted-maven-repository-cbb778031f68
https://reposilite.com

Do là lần đầu viết bài và mới tiếp cận Java được 4-5 tuần nên có gì sai sót gì về tên gọi hay sai ở đâu mọi người góp ý giúp mình cải thiện nhé 😄
Chúc mọi người nhiều sức khoẻ ❤️

Bình luận

Bài viết tương tự

- vừa được xem lúc

In app purchase trong Android (Phần 2)

Bài viết trước mình đã giới thiệu sơ lược về Google Billing Library và các setup môi trường. Trong bài viết này, chúng ta sẽ xem xét kỹ hơn vòng đời khi mua one-time product, cụ thể là quy trình bán và cấp cho người dùng mặt hàng kỹ thuật số mà họ đã mua trong ứng dụng của bạn.

0 0 60

- vừa được xem lúc

Những website tự học lập trình hiệu quả

Tự học lập trình để nâng cao kỹ năng luôn là nhu cầu thiết yếu của mỗi lập trình viên. Chẳng gì hơn khi tự mình tìm hiểu, trau dồi thêm kiến thức chuyên môn lập trình.

0 0 102

- vừa được xem lúc

Gluon Mobile: một framework tạo ứng dụng mobile đa nền tảng khác

Trong thế giới mobile thì React Native và Flutter quá là nổi tiếng trong việc hỗ trợ làm ứng dụng đa nền tảng vì thế là nó làm lu mờ đi phần nào các framework khác, Gluon có lẽ vì thế cũng cùng chung

0 0 20

- vừa được xem lúc

VARIABLES IN JAVA

This posts is introduce Types of variables in Java. . Local Variables. Instance Variables.

0 0 18

- vừa được xem lúc

15 JAVA CODING BEST PRACTICES CHO NGƯỜI MỚI

Ngay từ đầu, Java là một trong những ngôn ngữ lập trình thống trị. Trong thời đại tiến bộ ngày này, nơi mà nhiều ngôn ngữ mạnh mẽ có mặt đã chết từ lâu, Java vẫn phù hợp và phát triển nhanh chóng theo

0 0 56

- vừa được xem lúc

JDBC là gì? không cần học JDBC đâu

Giới thiệu. Hiện nay hầu hết các ứng dụng Java hay các framework của nó đều dần chuyển sang các ORM(Object Relational Mapping) để làm việc với database, có thể kể đến là hibernate được sử dụng rộng rã

0 0 28